6

いくつかの項目を持つ LisView があります。これに、次のように OnItemClickListener を (内部クラスとして) 接続しました。

lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Toast.makeText(ShoppingListApp02Activity.this, "List item selected:" +  
    items.get(position).getId(), Toast.LENGTH_LONG).show();
    }
});

明らかなように、エントリを選択すると、そのエントリのオブジェクトの要素が表示されます。この例では、選択された Item オブジェクトの ID (リスト ID ではなく、ArrayList アイテムの作成時に設定されたオブジェクト ID) が表示されます。これはうまく機能し、選択したアイテムでやりたいことが何でもできるようになります。

ここで、選択した ListView 項目のコンテキスト メニューを開く「ロングクリック」リスナーも使用したいと考えています。それ、どうやったら出来るの?onCreateContextMenu リスナーを ListView にアタッチできましたが、onItemClickListener のように ArrayList の要素を取得する方法がわかりません。

これが私が持っているものです:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
    menu.add(0, v.getId(), 0, "Something");
    menu.add(0, v.getId(), 0, "Something else");  
}

OnCreateConextMenu は OnItemClickListener とは異なるパラメーターを取るため、OnItemClickListener のように ArrayList の要素にアクセスするにはどうすればよいですか?

4

6 に答える 6

14

コンテキスト メニュー パラダイムを引き続き使用することにした場合は、次のようにします。

リストを操作する場合は、次のことを考慮してください。

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  

    // Get the list
    ListView list = (ListView)v;

    // Get the list item position    
    AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
    int position = info.position

    // Now you can do whatever.. (Example, load different menus for different items)
    list.getItem(position);
    ...
}
于 2013-02-06T10:52:56.090 に答える
7

コンテキスト メニュー (PC での右クリックなど、幅広いコンテキストで使用される)をいじる代わりに、実装がはるかに簡単なonItemLongClickListViewイベントを提供します。例えば:

lv.setOnItemLongClickListener(new OnItemLongClickListener() {
   @Override
   public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
       long arg3) {
        // TODO Auto-generated method stub

        return false;
   }
});

これにより、連続して長押しアクションを実行できます。

于 2012-09-12T13:27:08.037 に答える
5

行ビューの長押しイベントのイベント ハンドラー内で、ビューのコンテキスト メニューを開きます。

convertView.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                ((Activity)mContext).openContextMenu(v);
                return true;
            }
        });

このようにして、ビューのクリックと長押しのコンテキスト メニューの両方がリストビューの行項目で機能します。

于 2012-09-12T13:42:26.673 に答える
4

最初にコンテキスト メニューをリストビューに登録して、コンテキスト メニューを開きます。

registerForContextMenu(YOUR LIST-VIEW OBJECT);

次に、 onCreateContextMenu() メソッドを使用できます。

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
    menu.add(0, v.getId(), 0, "Something");
    menu.add(0, v.getId(), 0, "Something else");  
}

ContextMenuを使用するために、リストビューでlongClickListenerを実際に使用する必要はありません。

それがあなたを助けることを願っています。

于 2012-09-12T13:46:25.860 に答える