【问题标题】:Android fragment refresh on back press后按时刷新 Android 片段
【发布时间】:2016-12-24 04:42:35
【问题描述】:

我有一个应用程序在列表视图中显示来自数据库的数据,当单击列表视图中的项目时,它会打开一个活动并显示有关该特定项目的更多数据,包括删除它的能力。当它删除它时,第一个片段被带出后台堆栈,但是,列表视图不会更新以显示删除,当片段从后台堆栈中拉出时,如何让片段刷新它?

片段活动在 onBackPressed 中有这个

@Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (fragmentManager.getBackStackEntryCount() != 0) {
            fragmentManager.popBackStack();
        }
        else if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

【问题讨论】:

  • 如果您有某种ListAdapter 或其他东西,您可以覆盖它的onResume() 方法并通过调用notifyDataSetChanged() 来更新列表。试试看它是否有效。

标签: java android fragment refresh


【解决方案1】:

更新您的列表视图适配器

@Override
public void onViewCreated(View view, @Nullable Bundle   savedInstanceState) {
 super.onViewCreated(view, savedInstanceState);
 if (listAdaptor != null){
   listAdaptor.notifyDataSetChanged();
 }
}

【讨论】:

  • 对不起,我该怎么办?
【解决方案2】:

将此监听器添加到您的活动中。

 getSupportFragmentManager().addOnBackStackChangedListener(getListener());

  private FragmentManager.OnBackStackChangedListener getListener() {
        FragmentManager.OnBackStackChangedListener result = new FragmentManager.OnBackStackChangedListener() {
            public void onBackStackChanged() {
                FragmentManager manager = getSupportFragmentManager();

                if (manager != null) {
                    manager.findFragmentById(R.id.mall_fragment_container).onResume();
                }
            }
        };

        return result;
    }

当后台堆栈发生变化时,它将调用片段 onresume。在你的片段的简历上做你的工作。注意不要忘记将片段广告到后台。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多