当前位置: 首页 > 知识库问答 >
问题:

Gridview在Android中按位置更改项目背景

黄伟
2023-03-14

我有自定义基地适配器。我在我的网格视图中使用的。我试图按位置更改项目背景颜色(也更改Textview的文本颜色)这是我的基本适配器

public class ServiciesGridAdapter extends BaseAdapter {
private Context context;

private List<ServicesListItem> itemList;

public ServiciesGridAdapter(Context context, List<ServicesListItem> mobileValues) {
    this.context = context;
    this.itemList = mobileValues;

}
public View getView(final int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View gridView;
    if (convertView == null) {
        gridView = new View(context);
        gridView = inflater.inflate(R.layout.view_servisies_gridview_items, null);

        final LinearLayout mainLayout = (LinearLayout) gridView.findViewById(R.id.gridview_items_layout);


        final TextView serviciesID = (TextView) gridView.findViewById(R.id.servicies_grid_id);
        final TextView serviciesName = (TextView) gridView.findViewById(R.id.servicies_grid_name);
        serviciesID.setText(itemList.get(position).getName());
        serviciesName.setText(itemList.get(position).getIdentifier() + " EUR");



        mainLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainLayout.setBackgroundResource(R.drawable.rounded_corners_blue);
                serviciesID.setTextColor(Color.parseColor("#ffffff"));
                serviciesName.setTextColor(Color.parseColor("#ffffff"));


            }
        });

    } else {
        gridView = (View) convertView;
    }

    return gridView;
}

@Override
public int getCount() {
    return itemList.size();
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}


}

当我在项目点击中运行我的应用程序时,我可以更改背景颜色,但当我选中另一个项目时,第一个项目的背景是相同的。简单地说,我只想在每次单击时更改一个项目的背景。

我怎样才能解决我的问题?

共有2个答案

南宫博简
2023-03-14

使用列表选择器按网格视图中的位置更改项目背景。

添加颜色你的颜色.xml

<resources>
 <color name="onClickColor">#FFFFFF</color>  
</resources>

selecter.xml添加到可绘制文件夹

<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item 
     android:state_pressed="true"
     android:drawable="@color/onClickColor">
 </item>
</selector>

listSelector添加到您的GridView

<GridView
    android:id="@+id/grid_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:listSelector="@drawable/selecter">
</GridView>

看看这篇文章。。。

欧旻
2023-03-14

您必须重置所有其他视图文本颜色和背景,因此进行循环并执行此操作。尝试以下代码

    mainLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        for(int i=0;i<parent.getChildCount();i++){
            View c = parent.getChildAt(i);
            c.findViewById(R.id.gridview_items_layout).setBackgroundResource(defaultResource);
            (TextView) c.findViewById(R.id.servicies_grid_id).setTextColor(defaultColor);
            ((TextView) c.findViewById(R.id.servicies_grid_name)).setTextColor(defaultColor);
        }
        mainLayout.setBackgroundResource(R.drawable.rounded_corners_blue);
        serviciesID.setTextColor(Color.parseColor("#ffffff"));
        serviciesName.setTextColor(Color.parseColor("#ffffff"));


    }
});
 类似资料:
  • 我想更改我的Android项目的设置,这样源代码就不会从[project_name]/app/src中获取,而是可以将其设置为从外部文件夹中获取。 项目结构原因是我想要共享我的src文件夹,所以我想在我的本地计算机上的Dropbox文件夹下定位。 有没有办法在Android Studio改变一个Android项目的SRC文件夹的路径?(在《月蚀》中,这是可能的) 以下是在Eclipse中如何完成的

  • 我想改变Long Press上Card View的背景,我访问了这么多论坛,但没有人给出正确的答案。 那么,如何改变列表/卡片/回收器视图的背景,就像长按导航视图项目一样??

  • 我有一个清单,我在回收商的视图中展示了这一点 一些项目有蓝色背景和其他项目有灰色背景 我想编辑所选项目背景(所选项目表示已单击的项目) 这是我的适配器类

  • 我想设置网格视图的自定义背景,但是当网格加载时,网格背景的第一个项目没有加载,并且其余所有项目都正确加载。以下是我的代码,所以请帮忙。 这是我的适配器类。 这是适配器的 xml。 实际上,我用毕加索图书馆从互联网上下载照片。我已经为网格视图的每一项创建了自定义背景,但当网格视图首先加载时,只有网格的第一项(网格的零位置)不工作,网格视图的所有背景项都设置正确。

  • 在这里我有项目的列表在回收器视图这是取自Firebase.所以我试图改变其背景颜色当用户点击它.但是当我点击项目1然后项目4背景颜色也得到改变.如果点击项目2然后项目8颜色也.它给不恰当的结果。 视图持有者类

  • 下面的修复你的位置->理解位置符号一节也解释了这些图标。 正如你所看到的,它不是标记,它是一个位置按钮,正如我所写的,所以我的问题是我如何才能改变图标(位置按钮)到我想要的图标。