Reputation: 6922
Is it possile to set some item unclickable in ListView or GridView on Android?
For example, if user click item 0, I want to set item 1 cannot be click.
But if handle in onItemClick method, it still can click and change color.
I want it cannot be click means item click but do nothing.
My code as below:
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
}
}
});
How can I set it?
Upvotes: 0
Views: 2992
Reputation: 6867
There is one problem with what you want to achieve. If - for example - the item that you want to disable is not currently visible in ListView
because user have smaller screen and it doesn't fit the size of ListView
, this item doesn't yet have any View
assigned to it. This means that you can't really make this item not clickable, because it doesn't exist.
Solution which Avadhani Y posted is wrong, because it makes the item that you just clicked not clickable and you want to alter another item.
What you want then is to create your own Adapter
for ListView
(if you don't yet use your custom Adapter
) and override getView()
method, like this:
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;
}
}
And your OnItemClickListener
for ListView
should look like this:
final ListView lv = (ListView)findViewById(R.id.listView1);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if((position == 0) && (lv.getFirstVisiblePosition() == 0)) {
((MyAdapter)lv.getAdapter()).itemAtPos0Clicked = true;
((MyAdapter)lv.getAdapter()).notifyDataSetChanged();
}
}
});
I didn't test it or anything, so you will probably have to fix few errors.
Upvotes: 2
Reputation: 7636
Yes, you can do that as below:
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);
}
}
});
Upvotes: 1