2

Base アダプターを拡張するカスタム リスト アダプターを作成しました。リスト内の各アイテムには、イメージボタン、2 つのテキストビュー、およびボタンがあります。リスト内のアイテムのいくつかのオプションを表示するために、コンテキスト メニューをリストに追加しようとしました。

registerForContextMenu(getListView());

MenuInflater オブジェクトを使用して、コンテキスト メニューの xml ファイルを拡張しました。しかし、リスト内のアイテムをクリックしても何も表示されないか、クリック時のリストのアイテムの通常の強調表示が表示されません。カスタム リスト ビューでコンテキスト メニューが機能しないということでしょうか。どんな助けでも大歓迎です。

よろしく、プライマル

4

4 に答える 4

9

ListView の子項目がロング クリック可能であることを確認してください。

これは、xml レイアウト ファイルで実行できます。たとえば、次のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:longClickable="true">

    <!-- Child elements -->

</LinearLayout>

または、Java コードで実行できます。

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
   CustomView customView = new CustomView();
   customView.setLongClickeable(true);
}

お役に立てば幸いです。

于 2012-04-28T23:08:34.400 に答える
4

必要に応じて、registerForContextMenu、onCreateViewまたはonCreateを呼び出します。

registerForContextMenu(getListView());

以下に示すように、アダプタに実装します。

 public class CustomeLabelAdpater extends BaseAdapter implements View.OnCreateContextMenuListener{

この行をgetViewメソッドに入れます。

vi.setOnCreateContextMenuListener(this);

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        vi.setOnCreateContextMenuListener(this);
}

このメソッドをアダプターにブランクとして入れてください。

 public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
         // empty implementation
       }

次に、フラグメントまたはアクティビティでonCreateContextMenuとonContextItemSelectedをオーバーライドします。

@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view,
                                ContextMenu.ContextMenuInfo contextMenuInfo) {
    // create context the menu
    Activity.getMenuInflater().inflate(R.menu.context_menu, contextMenu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.open:
                return true;
            default:
                return super.onContextItemSelected(item);
        }
}
于 2012-11-02T06:56:39.043 に答える
4

カスタムリストアダプターで機能するはずです。頭に浮かぶ唯一のことは、registerForContextMenu()後に呼び出す必要があるsetListAdapter()ことです(を使用している場合ListActivity)。

于 2010-05-11T18:28:10.083 に答える
0

ListActivity の拡張中にカスタム アダプターを使用すると、同様の問題が発生しました。

これらのイベントを適切に登録するには、setContentViewが以前に呼び出されていることを確認する必要があることがわかりました。setOnCreateContextMenuListener

例:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    getListView().setOnCreateContextMenuListener(this);

    //  do adapter calls etc here

}

お役に立てれば。

于 2011-09-04T03:42:29.127 に答える