我有一个Aync任务
public class XmlNetwork extends AsyncTask< String, Void, List<PEMenuItem>
基本上将xml文件加载到我想用来更改导航抽屉菜单项的某些对象中。它有一个覆盖功能
protected void onPostExecute(List<PEMenuItem> result)
所以结果现在是我从xml加载的3个对象的列表。
此时,我想在班上打个电话
public class NavigationDrawerFragment extends Fragment
构建菜单,添加onclicklisteners等。
我之前已经学会了如何添加一些回调,从片段调用到我的主要活动,但是我如何进行反向操作,从我的Async类调用到片段?我希望将列表与其一起发送,这与
一致 @Override
protected void onPostExecute(List<PEMenuItem> result) {
NavigationDrawerFragment fragment = (NavigationDrawerFragment) getFragment().modifyMenu(result);
}
答案 0 :(得分:0)
NavigationDrawerFragment中的菜单项通常只是ListView中的项目。因此,它们由适配器支持。将新项目设置为该适配器的内容,并在适配器上调用notifyOnDatasetChanged。这将导致列表从该适配器重新获取项目。例如,您可以使用类似这样的东西作为菜单列表的适配器(简化):
public class MenuItemsAdapter extends BaseAdapter {
private List<String> menuItems;
public MenuItemsAdapter(Context context) {
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Empty for now
menuItems = new ArrayList<>();
}
public void setNewMenuItems(List<String> newMenuItems) {
this.menuItems = newMenuItems;
notifyDataSetChanged();
}
@Override
public int getCount() {
return menuItems.size();
}
@Override
public String getItem(int i) {
return menuItems.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view == null) {
view = inflater.inflate(R.layout.your_menu_item_layout, viewGroup, false);
}
TextView menuItemText = view.findViewByIt(R.id.your_menu_item_text);
menuItemText = menuItems.get(position);
return view;
}
}