微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 无法在ViewPager中另一片段的片段中刷新/更新listview

我很难想出下一件事情.

我有什么:我有一个看门人和几页.在这个问题中,只有两个是重要的,可以称之为Fragment1和Fragment2,它们是彼此相邻的. Fragment1包含一个列表视图,其中包含来自互联网(外部数据库)的数据. Fragment2包含一个简单的按钮.

我的目标:如果我点击Fragment2中的按钮,我将一个新项目添加到外部数据库.我想使用这个新项目更新/刷新Fragment1中的列表视图.

notifyDataChanged()在我的情况下不起作用,不过到目前为止,我相信它会恢复每个页面.我将以最清晰的方式介绍我的问题,所以让我看看我有代码,这是我的ViewPager适配器:

class MyPagerAdapter extends FragmentStatePagerAdapter {
        public List<String> fragmentsA; 

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            fragmentsA = fragments;
        }

        @Override
        public Fragment getItem(int position) {
           return Fragment.instantiate(context,fragmentsA.get(position));

        }

        @Override
        public CharSequence getPageTitle(int position) {
           return mEntries.get(position % CONTENT.length).toupperCase();
        }

        @Override
        public int getCount() {
          return mEntries.size();
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    }

Fragment1 onCreateView()(很快):

public View onCreateView(LayoutInflater inflater,final ViewGroup container,Bundle savedInstanceState) {

    getData();
    View view = inflater.inflate(R.layout.latestapps_tab,container,false);
    lw = (ListView) view.findViewById(R.id.lw);
    context = getActivity().getApplicationContext();
    act = this.getActivity();
    m_adapter = new ItemAdapter();
    lw.setAdapter(m_adapter);

return view;
}

我创建了ViewPager和适配器,我为ViewPager设置了适配器,之后我在Main类中填充了我的碎片.之后,我goint有一个功能齐全的ViewPager与2片段.

pager = (ViewPager)findViewById( R.id.viewpager );
  adapter = new MyPagerAdapter(getSupportFragmentManager());
  indicator = (TabPageIndicator)findViewById( R.id.indicator );
  pager.setAdapter( adapter );
  indicator.setViewPager( pager );
  pager.setCurrentItem(INITIAL_PAGE);
  pager.setoffscreenPageLimit(3);

  //adding fragments to the pager
  fragments.add( Fragment1.class.getName());    
  fragments.add( Fragment2.class.getName());

在Fragment1中,我有一个列表视图,每个列表项中都有一些textview.加载工作完美:我创建了ArrayLists,我从外部数据库的数据填充列表.加载完成后,我将使用这些吨数据填充列表.
在片段2中,单击按钮,我希望更新该列表视图,以便在列表视图中创建一个新行,并从外部数据库中提供一些数据. (当然写入数据库的作品)

我的猜测是,我不能刷新ArrayLists或者我不会重新启动Fragment1,所以只有当我退出并再次启动应用程序时,getDataFromsql()方法才会转换,或者我在ViewPager中滑动Fragment1被分离.所以我无法更新或刷新Fragment1.有人可以帮助这个问题吗?

编辑

我设法通过向fragment2发送消息来更新自身,从而实现这一点.但我不知道这是否是一个很好的解决方案,没有一个更好的方法,即只是刷新整个片段.

好的,我认为这一定是我的懒惰,但我现在解决了.对于仍然想要从另一个更新片段的人,或者只是在片段之间进行连接,我会告诉你适当的方法

>您必须实现自己的监听器,通过持有人的活动来帮助您在片段之间进行沟通.这可以在这里找到:http://developer.android.com/training/basics/fragments/communicating.html.非常简单有用.
>您必须检索片段,这又是简单的:Retrieve a Fragment from a ViewPager这些Q提供了几种可接受的方式,我使用了SpareArray解决方案.

感谢您的帮助反正!

解决方法

您需要能够从您的活动中获取您的片段,要做到这一点,您需要从适配器中获取片段,则需要向页面适配器添加几种方法
public Fragment getFragment(ViewPager container,int position,FragmentManager fm) {
    String name = makeFragmentName(container.getId(),position);
    return fm.findFragmentByTag(name);
}

private String makeFragmentName(int viewId,int index) {
    return "android:switcher:" + viewId + ":" + index;
}

然后从您的活动中做出以下方法

public Fragment getFragmentbyPosition(int position) {
    return adapter.getFragment(pager,position,getSupportFragmentManager());
}

现在在片段2上调用如下:

Fragment1 fragment1 = (Fragment1) ((MyActivity)getActivity()).getFragmentbyPosition(0);

现在您将能够从片段2调用fragment1上的公共方法,因此只需在您的onClick中使用该方法,并告诉fragment1来更新它的列表.

现在makeFragmentName起作用的原因就是FragmentPagerAdapter如何创建它所生成片段的标签.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android岛屿数量算...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Andro...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑...
这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文...
这篇文章主要介绍了Android拼接如何实现动态对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android拼接如何实现动态对象文...
今天小编给大家分享一下Android全面屏适配怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...