Reputation: 835
I have two AutoComplete widget on which i have registered setOnItemClickListener like this
productTextView = (AutoCompleteTextView) findViewById(R.id.prodName_CB)
productTextView.setOnItemClickListener(this);
supplierTextView = (AutoCompleteTextView) findViewById(R.id.supplierName_CB);
supplierTextView.setOnItemClickListener(this);
@Override
public void onItemClick(AdapterView<?> adapter, View view, int pos, long rowId) {
Log.d("-----", "listener");
if (view.getId() == R.id.supplierName_CB) {
Log.d("-----", "inside Supplier wigdet");
loadFilteredProducts(supplierTextView.getText().toString());
}
else if(view.getId() == R.id.prodName_CB)
{
//getSupplierName(productTextView.getText().toString());
Log.d("-----", "inside Product wigdet");
}
}
i see the Log.d message for the Log.d("-----", "listener") but i dont get into the if/else.what is wrong in my code.
Upvotes: 0
Views: 282
Reputation: 778
Saw this thread after searching for the same problem but came up with my own solution after some trial and error.
I have two listviews, one is a custom list view and the other one is just a standards multiple item click.
My implementation catches both events by using the parent
ListView obj1List;
List<Object1> selectedObject1s = new ArrayList<Object1>();
ListView obj2List;
List<Object2> selectedObject2s = new ArrayList<Object2();
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
switch (parent.getId()) {
case R.id.obj1_list:
Object1 obj1 = (Object1) obj1List.getAdapter().getItem(position);
CheckedTextView ctv = (CheckedTextView) view;
if (ctv.isChecked()) {
ctv.setChecked(false);
selectedObject1s.remove(obj1);
} else {
ctv.setChecked(true);
selectedObject1s.add(obj1);
}
break;
// This catches the custom ListView w/ custom row cb_row_checked
case R.id.obj2_list:
Obj2 obj2 = ((Obj2ListAdapter) obj2List.getAdapter()).getItem(position);
CheckBox cb = (CheckBox) view.findViewById(R.id.cb_row_checked);
if (cb.isChecked()) {
cb.setChecked(false);
selectedObj2s.remove(obj2);
} else {
cb.setChecked(true);
selectedObj2s.add(obj2);
}
break;
}
}
Upvotes: 0
Reputation: 273
You should use adapter.getChildAt(position).getId()
instead of adapter.getId()
or view
.
Upvotes: 0
Reputation: 56925
Try this. Use Separate setOnItemClickListener for both AutoCompleteTextView.
productTextView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
// TODO Auto-generated method stub
}
});
supplierTextView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
// TODO Auto-generated method stub
}
});
Upvotes: 1
Reputation: 29199
You should use AdapterView.getId() not View.getId().
Cause View is the child of AutoCompleteTextView, not AutoCompleteTextView. So change onItemClick to following:
public void onItemClick(AdapterView<?> adapter, View view, int pos, long rowId) {
Log.d("-----", "listener");
if (adapter.getId() == R.id.supplierName_CB) {
Log.d("-----", "inside Supplier wigdet");
loadFilteredProducts(supplierTextView.getText().toString());
}
else if(adapter.getId() == R.id.prodName_CB)
{
//getSupplierName(productTextView.getText().toString());
Log.d("-----", "inside Product wigdet");
}
}
Upvotes: 0