2011-01-09 10 views
4

私の質問はこの1つに似ているListViewコントロールでヘッダー(またはフッター)クリック:ListView: disabling clicking/focus無効にロング

しかし、私はデフォルトのonClick、ちょうど長いクリックを無効にしたくありません。コンテキストメニューの作成のためにListViewを登録しました。ヘッダー要素に対して無効にしたい(または少なくともその動作を変更する)必要があります。私はこれについてどうやって行くのですか?

ありがとうございます!

答えて

4

それがわかりました! menuInfoが必ず(場所を持つ)AdapterContextMenuInfoであることは明らかではありませんでした。

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    if (((AdapterContextMenuInfo)menuInfo).position == 1) { 
     inflater.inflate(R.menu.foo1, menu); 
     return; 
    } 
    inflater.inflate(R.menu.foo2, menu); 
} 
1

私はこれを試していませんが、動作する可能性があります。

ListViewはListViewを拡張しているので、ListViewが「長押し」されていると、その子ビューが長クリックの下にあるリスナーを渡す必要があります。

onLongClickListenerを実装している独自のListViewクラスを作成し、Viewがヘッダーかフッターのいずれかであるかどうかを確認し、そうであれば 'true'を返してロングクリックが「消費」されたことを示し、さらなる措置を取る必要があります。

protected MyListView extends ListView 
    implements onLongClickListener { 

    public boolean onLongClick (View v) { 
     boolean longClickConsumed = false; 

     // Check if v is either your Header or Footer 
     // if so then set longClickConsumed to be true 

     return longClickConsumed; 
    } 
} 
0

This答えはそれで問題が取り消されないで長いクリックは、それだけで別の動作を持っているということです、ほとんど良いです。 UIは長いクリックがあるかのように振る舞いますが何も起こりませんので、何もしないとユーザーを混乱させます。

解決策は非常に簡単です。

  1. 無効にすることを機能とヘッダ/フッタ
に手動でクリックリスナーに設定 listView.addFooterView(footer, null, false);
  • をヘッダ/フッタを付加することにより、定期的なクリックと長いクリックの両方