1

TLDR:

クリックされたアイテムを参照するときは、「2131427332」ではなく「shareButton」を使用しますonCreateContextMenu()。これどうやってするの?

説明:

2つのコンテキストメニューがあるアクティビティがあります。したがって、私のonCreateContextMenu()メソッドでは、クリックされたアイテムのIDを取得し、対応するメニューを膨らませています。

しかし、それを行う方法を知っている唯一の方法は、v.getId();自分で作成したIDの代わりにifブロックでシステム生成のIDを使用しているため、これは悪い/奇妙に思えます。これを行うためのより良い方法はありますか?そのIDは変更されますか?この自動生成されたIDの代わりにXMLアイテムのIDを使用できますか?

コード:

/**
 * Opens the context menu(s)
 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if(v.getId() == 2131427332)
    {
        inflater.inflate(R.menu.share_menu, menu);
    }
    else if(v.getId() == 2131427329)
    {
        inflater.inflate(R.menu.options_menu, menu);
    }
}
4

2 に答える 2

3

自動生成されたR.classを参照するIDを使用できます

例えば:

if(v.getId() == R.id.my_custom_id) 
{

}

少し前に覚えているように、R.classのIDは静的なfinalでしたが、googleチームはそれを静的に変更したため、switchステートメントでは使用できなくなりましたが、コードで自由に使用できます。

それを見つけた!詳細については、http://tools.android.com/tips/non-constant-fieldsをご覧ください。

于 2012-12-05T22:02:02.540 に答える
0

つまり、shareButtonと呼ばれるビューがあります。

あなたがしなければならないことはこれを置き換えることです:

if(v.getId() == 2131427332) {
        inflater.inflate(R.menu.share_menu, menu);
    }

これとともに:

if(v.equals(shareButton)) {
        inflater.inflate(R.menu.share_menu, menu);
    }

そのような単純な!

于 2012-12-05T22:13:37.723 に答える