【问题标题】:Modify Navigation Fragment after Async Call异步调用后修改导航片段
【发布时间】:2014-09-17 20:41:16
【问题描述】:

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

【问题讨论】:

    标签: java android android-fragments android-asynctask


    【解决方案1】:

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

    【讨论】:

    • 好的,我想我明白你所说的更新新内容,但我想我的问题仍然存在于各个班级。 private ListView mDrawerListView;NavigationDrawerFragment 类的一部分,那么我将如何修改 onPostExecute 在我的 XmlNetwork 类中调用的这些值?
    • 我已经将适配器分离到它自己的类中,并且它在片段中工作,我能够向它发送上下文并让它正确显示列表。我此时的问题与上面基本相同,我无法在我的AsyncTask 对象中创建MenuItemsAdapter 对象,以便我可以在onPostExecute 中分配值/调用notifyOnDatasetChanged,因为我无法发送它(或不知道如何)向它发送正确的上下文。
    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2020-11-01
    • 2019-07-03
    相关资源
    最近更新 更多