Android Gridview无法更改所单击项目的背景颜色

时间:2016-10-10 10:27:46

标签: android android-gridview

我使用gridview显示一些带有表ID的表。当我单击其中一个表时,会出现一个对话框,提示是否打开一个新表。

如果单击“是”,请将背景颜色更改为红色。但是,看起来像下面的两种方法

view.setBackgroundColor(Color.parseColor("#ff0000"));
view.setBackgroundColor(0xFF00FF00);

无效!!

以下是完整的编码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_table);

    gridView=(GridView)findViewById(R.id.gridview);
    String table_names[]={"1a","1b","1c","1d","2a","2b","2c","2d","3a","3b","3c","3d"};
    gridView.setAdapter(new my_adapter(this,table_names));
    gridView.setOnItemClickListener(this);
}

@Override
public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, long l) {

    new AlertDialog.Builder(this)
            .setTitle("Table number: "+adapterView.getItemAtPosition(i).toString())
            .setMessage("Open Table?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    view.setBackgroundColor(Color.parseColor("#ff0000"));
                }
            })
            .setNegativeButton("No", null)
            .show();
}
}

class my_adapter extends BaseAdapter{

LayoutInflater inflater=null;
Context ctx;
String table_names[];
ArrayList store_table_no;

my_adapter(Context ctx, String table_names[]){
    this.ctx=ctx;
    this.table_names=table_names;
    store_table_no=new ArrayList<Integer>();
    for (int i=0;i<table_names.length;i++){
        store_table_no.add(table_names[i]);
    }
}

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

@Override
public Object getItem(int i) {
    return store_table_no.get(i);
}

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    View row=view;

    if(row==null){
        inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row=inflater.inflate(R.layout.single,null);
    }

    TextView tv_table_no=(TextView)row.findViewById(R.id.table_no);

    tv_table_no.setText(""+store_table_no.get(i));

    return row;
}

single.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:layout_width="170dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_green_dark"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true">

    <TextView
        android:text="101"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/table_no"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
</RelativeLayout>

为了更方便地了解我的场景,请查看截图。

enter image description here

1 个答案:

答案 0 :(得分:2)

在您的对话框中设置此代码是单击

gv.getChildAt(position).setBackgroundColor(Color.RED);

这里的位置是你gridview的孩子位置。这取决于你如何获得这个位置。