如何从BaseAdapter类访问活动java类中的List <>数组
我正在动态创建弹出式菜单,其中的项目将从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> listMenuItems
与listMenuItems.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
});
任何与解决方案请回复。
提前致谢!
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;
}
}
这没有奏效.. –
你可以试试@GRK的答案。 – KeLiuyue
可以定义像下面
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();
希望这有助于!
有一个名为getItem(int position)的方法,您可以从该方法返回相同的实例并调用adapter.getItem()。 –