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

前端之家收集整理的这篇文章主要介绍了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如何创建它所生成片段的标签.

猜你在找的Android相关文章