0

私は動的にポップアップメニューを作成しています。ここでアイテムはWebサービスから取り込まれます。BaseAdapterクラスからアクティビティJavaクラス内のList <>配列にアクセスする方法

状況は、構文解析がMainActivity.javaにありましたが、ポップアップメニューはBaseAdapter.javaクラス内にあります。私はlistMenuItems.add(strMenuItemNames)List<String> listMenuItems内アイテムを追加してい

try { 
     JSONArray jsonArray = new JSONArray(menuItemsResponse.toString()); 
     for (int i = 0; i < jsonArray.length(); i++){ 
     JSONObject object = jsonArray.getJSONObject(i); 
     String strMenuItemNames = object.getString("Name"); 

     listMenuItems.add(strMenuItemNames); 
       } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

:私は以下のコードを参照してくださいしなさいMainActivity.java内部の配列内のすべてのメニュー項目を追加しています。

ここで、BaseAdapterクラスからlistMenuitemsにアクセスします。以下はBaseAdapterクラスのgetView()メソッド内のポップアップメニューのための私のコードです:ソリューションと

PopupMenu popupMenu = new PopupMenu(activity, imgDropDown); 
popupMenu.getMenu().add() // array to be added here 


popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener({ 
    // on click events for each item 
}); 

誰でもご返信ください。

ありがとうございます!

+0

getItem(int position)というメソッドがあり、このメソッドから同じインスタンスを返し、adapter.getItem()を呼び出すことができます。 –

答えて

0

1.構築方法で使用する必要があるリスト情報を追加します。あなたのコードでそれ2.use

List<String> listMenuItems; 
public MyAdapter(List<String> listMenuItems, Context context) { 
    ... 
} 

popupMenu.getMenu().add(listMenuItems.get(position)); 

これを試してください。

public class MyAdapter extends BaseAdapter { 

    List<String> listMenuItems; 
    private LayoutInflater inflater; 
    private Context context; 

    public MyAdapter(List<String> listMenuItems, Context context) { 
     this.context = context; 
     this.listMenuItems = listMenuItems; 
     this.inflater = LayoutInflater.from(context); 
    } 

    ... 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = inflater.inflate(R.layout.your_layout, null); 
     ... 

     PopupMenu popupMenu = new PopupMenu(activity, imgDropDown); 
     // edited here 
     popupMenu.getMenu().add(listMenuItems.get(position)); // array to be added here 
     popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener({ 
       // on click events for each item 
     }); 
     return view; 
    } 
} 
+0

これは動作しませんでした。 –

+0

@GRKの答えを試すことができます。 – KeLiuyue

0

あなたはアクティビティは、このインタフェースを実装し、活動中で調製されるのlistItemsを返すことによってgetMenuItems()メソッドを実装

interface MenuItemProvider { 
    getMenuItems(); // add parameters, returntype based on your need. 
} 
の下のようなインターフェースを定義することができます。

ここでは、このインターフェイスを以下のように設定するためのアダプタが用意されています。

class yourActivity extends <> implements MenuItemProvider { 

// other implementation. 

// pass this implementation to your base adapter. 
baseadapterinstance.setMenuItemProvider(this); 


getMenuItems(){ 
// return list items. 
} 



    } 


/*** BaseAdpater class. ***/ 
private MenuItemProvider menuItemProviderImpl; 

void setMenuItemProvider(MenuItemProvider menuItemProviderImpl){ 
this. menuItemProviderImpl = menuItemProviderImpl; 
} 

// when you need to get the list, call 
menuItemProviderImpl.getMenuItems(); 

これが役立ちます。

関連する問題