0

このようにsetOnItemClickListenerを登録した2つのオートコンプリートウィジェットがあります

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");
    }
}

Log.d( "-----"、 "listener")のLog.dメッセージが表示されますが、コードのif/else.whatが間違っています。

4

4 に答える 4

1

これを試して。両方のAutoCompleteTextViewに個別のsetOnItemClickListenerを使用します。

 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
      }
 });
于 2012-08-29T05:25:07.770 に答える
0

またはadapter.getChildAt(position).getId()の代わりに使用する必要があります。adapter.getId()view

于 2012-08-29T06:38:08.193 に答える
0

View.getId()ではなくAdapterView.getId()を使用する必要があります。

原因ビューはAutoCompleteTextViewの子であり、AutoCompleteTextViewではありません。したがって、onItemClickを次のように変更します。

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");
    }
}
于 2012-08-29T05:19:49.293 に答える
0

同じ問題を検索した後にこのスレッドを見ましたが、いくつかの試行錯誤の後で私自身の解決策を思いつきました。

2つのリストビューがあります。1つはカスタムリストビューで、もう1つは標準の複数アイテムクリックです。

私の実装は、親を使用して両方のイベントをキャッチします

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;
    }
}
于 2013-09-11T17:56:38.210 に答える