1

OnItemLongClickListener を実装しています。リストアイテムをロングクリックすると、該当するリストアイテムのボタンを有効にします。LongClicked の後、ボタンは正常に有効になりますが、onListItemClick は起動されません。LongClicked なしで onListItemClick を実行すると、正常に起動します。その前に LongClicked が発生した場合、onListItemClick が発生しないのはなぜですか?

    OnItemLongClickListener listener =  new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
            Account a = null;
            a = (Account) av.getItemAtPosition(position);               
            Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
            v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);
            return false;
        }
    };
    getListView().setOnItemLongClickListener(listener);


  public void onListItemClick(ListView l, View v, int position, long id) {
    // Do something when a list item is clicked
    Account a = null;
    a = (Account) l.getItemAtPosition(position);
    Toast.makeText(AccountActivity.this, a.getAccountName(), Toast.LENGTH_SHORT).show();
  }
4

3 に答える 3

1
    OnItemLongClickListener listener =  new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
            Account a = null;
            a = (Account) av.getItemAtPosition(position);               
            Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
            v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);
            return false;
        }
    };
    getListView().setOnItemLongClickListener(listener);    

問題の原因を見つけました。これは、OnItemLongClick がクリックされたときに削除ボタンを有効にするために使用したコード行です。

v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);

その行を削除すると、コードは完全に機能します。しかし、まだ私は問題の解決策を持っていません。OnItemLongClick がクリックされたときに削除ボタンを有効にするには、そのコード行が必要です。

于 2012-12-10T13:38:21.960 に答える
1

以下のように実装してみてください。

setOnItemLongClickListener

setOnItemClickListener

getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
        Account a = null;
        a = (Account) av.getItemAtPosition(position);               
        Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
         v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);                   

        return false;
   }
});



getListView().setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
     Account a = null;
     a = (Account) l.getItemAtPosition(position);
     Toast.makeText(AccountActivity.this, a.getAccountName(), Toast.LENGTH_SHORT).show();  
   };
});
于 2012-12-07T12:19:08.550 に答える
0

ボタンを ImageView に置き換えました。その後、問題はありませんでした。2つのイベントは順調に進んでいます。そのため、ボタンに問題があることに気付きました。この状況で適切に機能するには、ボタンのいくつかのプロパティを設定する必要があると思います。問題をシミュレートできます。1. リストビューを使用します。2. TextView と ImageButton または Button を ListItem として追加して、リスト ビューをカスタマイズします。ボタンの可視性をデフォルトで非表示にします。3. onItemLongClick イベントを上記のように実装し、ItemLongClicked 時のボタンを作成します。4. ListItem を ItemLongClick し、ListItem のボタンを表示すると、特定の ListItem の onListItemClick イベントが機能しません。

于 2012-12-13T07:28:11.813 に答える