我的情况是这样的。 主界面是用Gridview展示出餐厅里的餐桌情况。
默认情况下,每个桌子都是绿色背景。 如果点击该item, 会出现一个Dialog 窗口;提示是否开桌子。 如果点击是,该item的背景颜色更换为红色。
以下是我的代码,请大神们指点迷津!
public class table extends AppCompatActivity implements AdapterView.OnItemClickListener{ GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_table); gridView=(GridView)findViewById(R.id.gridview); String wtf[]={"1a","1b","1c","1d","2a","2b","2c","2d","3a","3b","3c","3d"}; gridView.setAdapter(new my_adapter(this,wtf)); gridView.setOnItemClickListener(this); } @Override public void onItemClick(final AdapterView> adapterView, View view, final int i, long l) { new AlertDialog.Builder(this) .setTitle("台座号 "+adapterView.getItemAtPosition(i).toString()) .setMessage("确定开桌?") .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(table.this,adapterView.getItemAtPosition(i).toString()+" 已开桌,请下单。",Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("否", 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(); for (int i=0;i
如果再次点击同样item, 窗口再次出现,点击 ok 就返回默认颜色。
用selector
文件做item的背景颜色
例如
selector_item_bg.xml放到资源文件夹res/color/
中
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/red" android:state_selected="true"/>
<item android:color="@color/green" android:state_selected="false"/>
</selector>
其中@color/red
和@color/green
自己添加
然后在item的layout中添加背景色, 就是你的row.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/selector_item_bg" > ...省略中间的内容 </RelativeLayout>
关键代码就是android:background="@color/selector_item_bg"
把上面的selector
设置成item的背景色.
当你点击开桌的时候把对应的item的ViewsetSelected(true)
就可以变成红色了.
在代码里面大概是修改你的onItemClick()
@Override public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, long l) { new AlertDialog.Builder(this) .setTitle("台座号 "+adapterView.getItemAtPosition(i).toString()) .setMessage("确定开桌?") .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(table.this,adapterView.getItemAtPosition(i).toString()+" 已开桌,请下单。",Toast.LENGTH_SHORT).show(); // 这个view就是被点击的item, 也就是row.xml渲染出来的view // 把它设置为selected, selector就会使其变色 // 根据selector_item_bg.xml, true对应red, false对应green view.setSelected(true); } }) .setNegativeButton("否", null) .show(); } }
关键点就这些, 其他细节百度吧