3

ここで多くの投稿を解析しましたが、私の問題に似たものは見つかりませんでした。

基本的に私は電話openContextMenu(l)をかけようとしていますonListItemClick。そうすることで、 no のないコンテキスト メニューが作成されますmenuInfo。長いクリックを実行すると、正しく機能します。長いクリックが実行された後、私のコードは動作を開始し、実際にmenuInfoは null ではない を取得します。

からデータを取得する でListActivity満たされた があります。SimpleCursorAdapterSQL

私の onCreate I でregisterForContextMenu(getListView())。通話registerForContextMenu(l)直前にも使ってみました。openContextMenu(l)

どんな助けでも大歓迎です!ありがとう。

これが私のコードのサンプルです:

public class MY_Activity extends ListActivity {

...

@Override
public void onCreate(Bundle savedInstanceState) {

    ...

    UpdateTable();
    registerForContextMenu(getListView());
}

...

@Override
public void onListItemClick(ListView l, View view, int position, long id) {
    super.onListItemClick(l, view, position, id);

    //THIS DOESNT WORK UNLESS A LONG CLICK HAPPENS FIRST
    //registerForContextMenu(l);  //Tried doing it here too
    openContextMenu(l);
    //unregisterForContextMenu(l); //Then unregistering here...
}

@Override  
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo);  

    //menuInfo will be null here.

    menu.setHeaderTitle("Context Menu");
    menu.add(0, v.getId(), 0, "One");  
    menu.add(0, v.getId(), 0, "Two");
    menu.add(0, v.getId(), 0, "Three");
}

@Override  
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    if(info == null) {
        Log.e("","NULL context menu intem info...");
        return false;
    }
}

public void UpdateTable() {
    cursor = DatabaseHelper_Main.GetCursor(my_id);
    cursorAdapter = new SimpleCursorAdapter(this, R.layout.my_listview_entry, 
            cursor, fields, fieldResources, 0);
    setListAdapter(cursorAdapter);
}

...
4

1 に答える 1

0

今日、非常によく似た問題がありました。修正は予想外に簡単でしたが、理由はわかりませんが、とにかくここに投稿します.

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    m_contextMenu = true;
    registerForContextMenu(parent);
    m_listView.showContextMenuForChild(view);
    unregisterForContextMenu(parent);
    m_contextMenu = false;
}

m_contextMenu ブール値を使用して、コンテキスト メニューが表示されていることを示します。m_contextMenu が true の場合に false を返す onItemLongClickListener を使用して、コンテキスト メニューが表示されるようにします (onItemLongClick() が true を返す場合、コンテキスト メニューは表示されません)。 )。

于 2015-04-07T19:37:39.923 に答える