2017-10-18 114 views
0

我正在动态创建弹出式菜单,其中的项目将从Web服务中填充。如何从BaseAdapter类访问活动java类中的List <>数组

情况是,解析已在MainActivity.java中,但弹出式菜单位于BaseAdapter.java类内。我将所有的菜单项MainActivity.java里的数组中。请参考下面的代码:

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(); 
    } 

我加入项目内List<String> listMenuItemslistMenuItems.add(strMenuItemNames)

现在,我想从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.添加您需要在施工方法中使用的列表信息。

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

2.使用它在你的代码。

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

可以定义像下面

interface MenuItemProvider { 
    getMenuItems(); // add parameters, returntype based on your need. 
} 

活动实现了这个接口和通过返回在活性制备的listItems中实现getMenuItems()方法的接口。

现在,您的适配器应该有一个setter方法来设置此接口,如下所示。

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(); 

希望这有助于!

相关问题