Java 在异步调用后修改导航片段

Java 在异步调用后修改导航片段,java,android,android-fragments,android-asynctask,Java,Android,Android Fragments,Android Asynctask,我有一个Aync任务 公共类XmlNetwork扩展异步任务

我有一个Aync任务

公共类XmlNetwork扩展异步任务

这实际上是将xml文件加载到一些对象中,我想使用这些对象来更改导航抽屉菜单项。它有一个覆盖功能

<代码>保护的void onPostExecute(列表结果)

现在的结果是我从xml加载的3个对象的列表

在这一点上,我想在我的课堂上打个电话

公共类导航抽屉片段扩展片段

要构建菜单,请添加onclicklisteners等

我之前已经学习了如何添加一些回调,从片段调用到我的主活动,但是我将如何做相反的事情,从我的异步类调用到片段?我想把清单和它一起寄出去,大概是

    @Override
    protected void onPostExecute(List<PEMenuItem> result) {
        NavigationDrawerFragment fragment = (NavigationDrawerFragment) getFragment().modifyMenu(result);
    }
@覆盖
受保护的void onPostExecute(列表结果){
NavigationDrawerFragment=(NavigationDrawerFragment)getFragment().modifyMenu(结果);
}

导航抽屉片段中的菜单项通常只是列表视图中的项。因此,它们由适配器支持。将新项目设置为该适配器的内容,并在适配器上调用notifyOnDatasetChanged。这将导致列表从该适配器重新获取项目。例如,您可以使用类似这样的东西作为菜单列表的适配器(简化):

公共类MenuItemsAdapter扩展BaseAdapter{
私有列表菜单项;
public MenuItemsAdapter(上下文){
this.context=上下文;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
//暂时空着
menuItems=newarraylist();
}
公共无效设置newMenuItems(列出newMenuItems){
this.menuItems=newMenuItems;
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回menuItems.size();
}
@凌驾
公共字符串getItem(int i){
返回menuItems.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
如果(视图==null){
视图=充气机。充气(R.layout.your_菜单项_布局,视图组,false);
}
text查看菜单项text=view.findViewByIt(R.id.your\u菜单项\u文本);
menuItemText=menuItems.get(位置);
返回视图;
}
}

好,我想我已经明白你说的关于更新新内容的内容,但我想我的问题仍然在所有的类中蔓延。
私有列表视图mDrawerListView
NavigationDrawerFragment
类的一部分,那么如何在我的
XmlNetwork
类中修改
onPostExecute
调用中的那些值呢?我已经将适配器分离到它自己的类中,它在片段中工作,我能够发送上下文并让它正确显示列表。我在这一点上的问题与上面的基本相同,我无法在我的
AsyncTask
对象中创建
MenuItemsAdapter
对象,以便我可以在
onPostExecute
中分配值/调用
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;
    }
}