是否可以在Android上的ListView或GridView中设置一些不可点击的项目?
例如,如果用户单击项目0,我想设置项目1无法单击
但是如果在onItemClick方法中处理,它仍然可以点击并改变颜色
我希望它不能点击意味着项目点击但什么都不做
我的代码如下:
GridView gv = (GridView)findViewById(R.id.gv);
gv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if(position == 0) {
//set item 1 unclickable
}
}
});
ListView lv = (ListView)findViewById(R.id.lv);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if(position == 0) {
//set item 1 unclickable
}
}
});
我该如何设置?
答案 0 :(得分:2)
您想要实现的目标存在一个问题。如果 - 例如 - 您要禁用的项目当前在ListView
中无法显示,因为用户屏幕较小且不符合ListView
的大小,则此项目尚无任何内容分配给View
。这意味着您无法真正使此项目无法点击,因为它不存在。
Avadhani Y发布的解决方案是错误的,因为它使您刚刚点击的项目无法点击并且您想要更改另一个项目。
您希望为Adapter
创建自己的ListView
(如果您尚未使用自定义Adapter
)并覆盖getView()
方法,就像这样:
public class MyAdapter extends ArrayAdapter<String> {
private List<String> items;
public boolean itemAtPos0Clicked = false;
public MyAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public MyAdapter(Context context, int resource, List<String> items) {
super(context, resource, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(position == 1 && itemAtPos0Clicked) {
convertView.setClickable(false);
}
return convertView;
}
}
OnItemClickListener
的{{1}}应如下所示:
ListView
我没有测试它或任何东西,所以你可能需要修复一些错误。
答案 1 :(得分:1)
是的,你可以这样做:
ListView lv = (ListView)findViewById(R.id.lv);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if(position == 0) {
arg1.findViewById(R.id.lv).setClickable(false);
}
}
});