AndroidのListActivityでコンテキストメニューをどのように実装しますか? -- android フィールド と user-interface フィールド と long-click フィールド 関連 問題

How do you implement context menu in a ListActivity on Android?












39
vote

問題

日本語

LONGクリックでトリガーされたコンテキストメニューを実装しますか、組み込みレイアウトとListAdapterを使用しているListActivityをタップしますか?

英語

How do you implement a context menu triggered by a long click or tap on a ListActivity that is using the built in layouts and a ListAdapter?

</div
        
 
 

回答リスト

74
 
vote
vote
ベストアンサー
 

oncreateメソッド呼び出し onCreateContextMenu(ContextMenuメニュー、ビュービュー、ContextMenuInfo menuinfo)。 menuinfo引数は、この方法でどのアイテムがロングクリックされたかに関する情報を提供できます。

<事前> <コード> AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(TAG, "bad menuInfo", e); return; } long id = getListAdapter().getItemId(info.position);

とあなたは通常の方法でメニュー項目を追加します menu.add :

<事前> <コード> menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string);

およびユーザがオプションを選択した場合、 OnContextItemSelected が呼び出されます。 onmenuitemSelected andこの事実は、コンテキストメニューから呼び出しを受信するために他のメソッドを使用することを除いて、ドキュメントで明示的に説明されていません。注意してください、IDを共有しないでください。

OnContextItemSelecteされているメニューインファー、したがって、 getMenuInfo():

<事前> <コード> try { info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); } catch (ClassCastException e) { Log.e(TAG, "bad menuInfo", e); return false; } long id = getListAdapter().getItemId(info.position);
 

On the onCreate method call registerForContextMenu like this:

registerForContextMenu(getListView()); 

and then populate the menu on onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo). The menuInfo argument can provide information about which item was long-clicked in this way:

AdapterView.AdapterContextMenuInfo info; try {     info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) {     Log.e(TAG, "bad menuInfo", e);     return; } long id = getListAdapter().getItemId(info.position); 

and you add menu items in the usual way calling menu.add:

menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string); 

and when the user picks an option, onContextItemSelected is called. Also onMenuItemSelected and this fact is not explicitly explained in the documentation except to say that you use the other method to receive the calls from the context menu; just be aware, don't share ids.

On onContextItemSelected you can get ahold of the MenuInfo and thus the id of the item selected by calling getMenuInfo():

try {     info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); } catch (ClassCastException e) {     Log.e(TAG, "bad menuInfo", e);     return false; } long id = getListAdapter().getItemId(info.position); 
</div
 
 
     
     
14
 
vote

Activity.RegisterForContextMenu(ビュー)

 

You should also look at Activity.registerForContextMenu(View).

</div
 
 
5
 
vote
<事前> <コード> listView = (ListView) findViewById(R.id.listpockets); registerForContextMenu(listView); public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) { //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo; menu.setHeaderTitle(getString(R.string.titleDelete)); menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete)); }; @Override public boolean onContextItemSelected(MenuItem item) { if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); long id = this.listView.getItemIdAtPosition(info.position); Log.d(TAG, "Item ID at POSITION:"+id); } else { return false; } return true; }
 
listView = (ListView) findViewById(R.id.listpockets); registerForContextMenu(listView);    public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) {     //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;     menu.setHeaderTitle(getString(R.string.titleDelete));        menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete)); }; @Override public boolean onContextItemSelected(MenuItem item) {      if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID)     {        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();        long id = this.listView.getItemIdAtPosition(info.position);        Log.d(TAG, "Item ID at POSITION:"+id);     }     else     {         return false;     }     return true; } 
</div
 
 

関連する質問

23  Androidマップ:マップを長くクリックするには?  ( Android maps how to long click a map ) 
地図上のその時点で場所マーカーが表示されるように、マップビューをクリックするにはどのようにクリックしますか。 成功せずにカップルの方法を試してみました: 1)<コード> setOnLongClickListener の<コード> MapvView は、Lo...

1  コンテキストアクションバーとロングクリックコピー/ペーストを無効にする  ( Disable contextual action bar and long click copy paste ) 
これをたくさん検索しましたが、アドバイスが見つかりませんでした... 私はあなた自身のクラシックアクションバーの実装を提供していますので、私はすべての活動を宣言しています requestWindowFeature(Window.FEATURE_NO_TITLE...

1  Appium、Pythonのロングクリック方法  ( Long click method in appium python ) 
PythonでAppiumでロングクリック方法はありますか? 私は私のプログラムの領域を長くクリックする必要があります。 <事前> <コード> 10-11-20090 ...

6  Xamarin UIテストでのAndroid LongClickをトリガーする方法  ( How to trigger an android longclick in xamarin ui test ) 
Recyclerview項目を長回りでアクティブにできるアクションモードを持つRecyclerviewを持っています。 Xamarin UIテストでAndroidを長クリックする方法? AndroidAppには、Touchandhold(FUNCクエリ)が...

2  アンドロイド。 GestureTector Longress - スレッショルドまたはタイムアウトが長い  ( Android gesturedetector longpress longer threshold or timeout ) 
長押し、さらにイベントの座標を捕獲する必要があります。 長押し動作のための閾値やタイムアウトがより良く適合することが私にあるようです。 <事前> <コード> final GestureDetector gestureDetector = new Gesture...

0  ボタンロングクリックしていません  ( Button long click does not work ) 
響板に取り組んでいて、私は音を共有するために長いクリックを実装したいです。 各ボタンの<コード> switch Case で作業しています <事前> <コード> public void MainMMP(View view){ switch (view...

39  AndroidのListActivityでコンテキストメニューをどのように実装しますか?  ( How do you implement context menu in a listactivity on android ) 
LONGクリックでトリガーされたコンテキストメニューを実装しますか、組み込みレイアウトとListAdapterを使用しているListActivityをタップしますか? ...

2  Android:ボタンのロングクリックテキスト  ( Android long click text on button ) 
私のAndroid-Appでは、2行のテキストのボタンを作成しようとしています。クリックしたときにボタンが実行しているのか表示されます(短い)、もう1つはロングクリックしたときに効果を表示し、ボタンを長クリックすることができます。 Androidシステムの段階...

2  タッチを聞くときは、ロングクリックイベントは起動しません  ( Long click event doesnt fire when also listening for touch ) 
public class Studente { private String nome; private String cognome; private String matricola; private String d...

1  一度にいくつかのボタンのためのSetOnlongClickListener  ( Setonlongclicklistener for several buttons at once ) 
私はそのボタン1,2,3がLongClickに応答して、ユーザーはテキストのボタンを入力するように求められます。 oncreateの中に私は書きました: <事前> <コード> Button botonEditable; Context context; @Ov...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有