Reputation: 2051
I have a ListView
which was showed without extends ListActivity
. I would like to enable setOnItemClickListener
. This is my code under onCreate
adapter = new CustomAdapter(this, MyDB);
setListAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(getBaseContext(), "test", Toast.LENGTH_LONG).show();
}
And I use the below code to enable ListView
.
protected ListView getListView() {
if (mListView == null) {
mListView = (ListView) findViewById(android.R.id.list);
empty = (TextView) findViewById(android.R.id.empty);
mListView.setEmptyView(empty);
}
return mListView;
}
protected void setListAdapter(ListAdapter adapter) {
getListView().setAdapter(adapter);
}
However, the setOnItemClickListener
is not working.
Upvotes: 1
Views: 578
Reputation: 321
You can set OnClickListener on the adapter something like this-
public class DeviceList_Adapter extends BaseAdapter implements View.OnClickListener
{
/************* CustomAdapter Constructor *****************/
public DeviceList_Adapter(Activity a, ArrayList d)
{
/********** Take passed values **********/
activity = a;
data=d;
/*********** Layout inflator to call external xml layout () ***********/
inflater = (LayoutInflater)activity.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if(data.size()<=0)
return 1;
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View vi = convertView;
ViewHolder holder;
if(convertView==null){
/****** Inflate listitem_device.xml file for each row ( Defined below ) *******/
vi = inflater.inflate(R.layout.listitem_device, null);
/******** Set Item Click Listner for LayoutInflater for each row *******/
vi.setOnClickListener(new OnItemClickListener(position));
}
return vi;
}
@Override
public void onClick(View v) {
Log.v("CustomAdapter", "=====Row button clicked=====");
}
/********* Called when Item click in ListView ************/
private class OnItemClickListener implements View.OnClickListener {
private int mPosition;
OnItemClickListener(int position){
mPosition = position;
}
@Override
public void onClick(View arg0)
{
MainActivity mainActivity = (MainActivity)activity;
/**** Call onItemClick Method inside CustomListViewAndroidExample Class ( See Below )****/
mainActivity.onItemClick(mPosition);
}
}
}
Have a method called onItemClick() in the activity where you plan to use the listview. This method will be called each time a row is clicked on the listview.
Upvotes: 0
Reputation: 27211
If you use clickable buttons inside , I think, the best way is not to use AdapterView.OnItemClickListener
but the usual onClick
event.
Or use android:descendantFocusability="blocksDescendants"
I you wish your case.
Upvotes: 2
Reputation: 372
Maybe You set onClickListener in xml layout - remove this.
You can specify onClickListener
for each list item view without ListView.setOnItemClickListener
Upvotes: 0