2012-02-28 1 views
1

彼らは、このサンプルコードで実行します。 ExpandableListViewはカテゴリとそのサブカテゴリの移入ますhttp://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.htmlどのようにonContextItemSelectedが解雇されたのかを特定しますか?私はExpandableListView、同じ方法を使用しています

(かつて私は、カテゴリをクリックしてください)。例: -Dairy(カテゴリ) -Milk(サブカテゴリー) -cheese(サブカテゴリー)私は牛乳やチーズに長いクリックすると

、メニューはこの機能を使用してポップアップ表示:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    ExpandableListContextMenuInfo info =(ExpandableListContextMenuInfo) menuInfo; 
    String selectedWord = ((TextView) info.targetView).getText().toString(); 
    menu.setHeaderTitle(selectedWord.split(",")[1]); //set header 
    String itemId = selectedWord.split(",")[0]; 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("action", "getProducts")); 
    nameValuePairs.add(new BasicNameValuePair("subcat_id", itemId)); 
    String response = helper.makeHttpRequest(nameValuePairs); 
    String[] items = response.split(";"); 

    for (int i=0; i<items.length; i++){ 
     menu.add(0, 0, 0, items[i]); 
    } 
} 

次に、ポップアップメニューのアイテムの1つをクリックすると、リスト内のどのアイテムが選択されたのかを知りたいとします(たとえば、「ミルク」をクリックすると、メニューに「1%ミルク」があります。 "2%ミルク"など。 この関数は解雇されます。

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 
    String title = ((TextView) info.targetView).getText().toString(); 
    String selected=""; 
    int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
     Toast.makeText(this, title + " selected: " + selected+ " " + childPos + " clicked in group " + groupPos , Toast.LENGTH_SHORT).show(); 
     return true; 
    } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
     int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     Toast.makeText(this, title + " selected: " + selected + " " + childPos + " clicked in group " + groupPos , Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return false; 
} 

しかし、リスト内のどの項目がクリックされたのかを判断する方法はありません。

アイデア? ありがとうございます!私がもっと明確にする必要があるかどうか私に教えてください。

答えて

1

ContextMenuに追加する各項目には、それぞれ固有の識別子が必要です。これは、選択されたメニュー項目を特定する必要がある場合に便利です。メニュー項目を追加するには、menu.add(0, unique_id, 0, items_name);のようにする必要があります。あなたがアイテムIDを使用してonContextItemSelectedにこのような何かを選択した項目を決定したいときに:

switch (item.getItemId()){ 
    case UNIQUE_ID_1: 
     //handle what to do 
    break; 
    case UNIQUE_ID_2: 
     //handle what to do 
    break; 
    .... 

だから、少し自分の実装を変更する必要があるかもしれません。私は可能な場合ごとに一意のIDをint定数として作成し、それぞれをメニューに具体的に追加します。もう少しコードを書くかもしれませんが、扱いがずっと簡単です。

あなたが新しいものであることから、ちょっとしたアドバイスもあります:誰かが良い回答をしたときは、その答えの横にあるチェックマークをクリックして受け入れてください。がんばろう!

+0

これは私が必要としていたものです。本当にありがとう! – mila

関連する問題