是否可以在Android上的ListView或GridView中设置一些可点击的项目?

时间:2013-06-27 06:47:48

标签: android listview gridview

是否可以在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
        }
    }
});

我该如何设置?

2 个答案:

答案 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);
    }
}
});