异步调用后修改导航片段

时间:2014-09-17 20:41:17

标签: java android android-fragments android-asynctask

我有一个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);
    }

1 个答案:

答案 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;
    }
}