2011-07-07 13 views
7

listView - onClickとLongClickの両方のタイプのクリックが必要です。ListViewがsetOnItemClickListenerを呼び出すのはsetOnItemClickListenerだけです。

私はこのようにそれを実装しました:

this.listViewSub = (ListView) this.findViewById(R.id.listsub); 

this.listViewSub.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(final AdapterView parent, final View view, final int position, 
       final long id) { ... } }); 

     // listen to long click - to share texts 
    this.listViewSub.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { ... } }); 

しかし、それは長いクリックを発射does't。 誰もが理由を知っていますか?

答えて

24

あなたはLongClickable

list.setLongClickable(true); 

list.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       final int arg2, long arg3) { 

} 
}); 
+0

ありがとうございました!私の問題を解決しました:) そして、BTW - setLongClickableトラフコードを行う必要はありません。XMLを使ってそれを調べるときにはより良い: android:longClickable = "true" – Ofershap

+1

'setOnItemLongClickListener'のドキュメントには、" Ifこのビューはロングクリック可能ではなく、ロングクリック可能になります。 – Vadim

+8

これは私のために働いていません... :( – Vadim

0

onLongClickコールバックが長いクリックを消費した場合はtrueを返し、それ以外の場合はfalseを返します。イベントがこのメソッドで処理される場合はtrueを返します。

+0

このメソッドの中にブレークポイントを追加しましたが、そこでは停止しません。イベントを発生させないようです。 – Ofershap

6

@Vadimを有効にする必要があり、あなたのリストビューのアダプタがBaseAdapterから延びているですか?はいの場合は、convertView.setLongClickable(true)も設定する必要があります。 getView()内にあります。

1

私にとっては、リストビューの行のレイアウト(ListViewレイアウトではない)を含むXMLファイルに、android:longClickable="true"を設定して、アイテムをロングクリックする必要がありました。

+0

私はこの問題で見た多くの提案された解決策のうちそれらすべて)、これは私のために働いている唯一のものです。 –