1

データベースのリストでコンテキスト メニューを使用する Android アプリを作成しています。私はそれをすべて正常に動作させ、マップを使用するアプリのセクションの構築に移りましたが、現在 (レベル 10 の Android Google エミュレーターに切り替えている間) 2 つの問題が発生しました。最初のものはすぐに修正されましたが、コンテキスト メニューが表示されなくなりました。エミュレータの変更と関係があるかどうかはわかりませんが、私のコードは次のとおりです。

onCreate には次のものがあります。

super.onCreate(savedInstanceState);

datasource = new DiaryDataSource(this);
datasource.open();

List<DiaryEntry> values = datasource.getAllDiaryEntries();

DiaryScheduleAdapter adapter = new DiaryScheduleAdapter(this,values);
setListAdapter(adapter);

registerForContextMenu(getListView());

次に、ArrayAdapter を拡張する私のクラスには次のものがあります。

@Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        DiaryEntry diaryEntry = getItem(position);

        View v = convertView;
        if ( v == null ) 
        {
            v = li.inflate(R.layout.diary_schedule, null);
        }

**** TextViews etc ****

        v.setOnClickListener(new OnItemClickListener(position));

        return v;

そして onCreateContextMenu:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.diary_context_menu, menu);
}

また、通常のプレス クリック リスナーには、次のように使用します。

private class OnItemClickListener implements OnClickListener
{           
    private int mPosition;

    OnItemClickListener(int position)
    {
        mPosition = position;
    }

    @Override
    public void onClick(View v) 
    {
        **** various bits of code to set up intent ****

        startActivity(descIntent);
    }               
}

そしてその下に onContextItemSelected メソッドがありますが、そこまでは行きません。繰り返しますが、コードに変更を加えていないことは確かですが、長押ししても何も起こりません。何か案は?

ありがとう

4

2 に答える 2

1

書き直し(IDEの外部でコードを書き込もうとしない日もあります)

これが私が言おうとしていたことのささいな例です:

public class ExampleActivity extends ListActivity {

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

        List<String> list = new ArrayList<String>();
        list.add("Shoes");
        list.add("Socks");
        list.add("Sandals");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        setListAdapter(adapter);

        ListView listView = (ListView) findViewById(android.R.id.list);
        registerForContextMenu(listView);
    }   

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        Log.v("Main", "Create Menu");
    }

    protected void onListItemClick (ListView l, View v, int position, long id) {
        Log.v("Main", "Item Click");
    }
}

コンテキストメニューを各行に固有にする必要があるようです。その場合は、を使用しmenuInfoます。

于 2012-04-29T16:10:21.853 に答える
1

解決策は、以下のコード行をgetViewメソッドに追加することでした。

convertView.setLongClickable(true);

たくさんの有益な情報を提供してくれたSamにもう一度感謝します

于 2012-04-30T10:30:40.533 に答える