Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 从ViewPager中的Activity更新片段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_4@ 我是 Android开发的新手,我非常感谢这里的一些帮助. @H_419_7@

@H_419_7@我正在使用包含TextView的片段,而我正在使用同@L_112_3@myFragment类的5个实例.

@H_419_7@在活动中,我有一个按钮和一个ViewPager,我需要按钮来更新所有片段实例内容,无论何时单击它.

@H_419_7@这是活动

@H_419_7@

public class MainActivity extends FragmentActivity {

final static String[] CONTENT = {"a","b"};
ViewPager pager;

@Override
public void onCreate(Bundle savedInstanceStatE) {
    super.onCreate(savedInstanceStatE);
    setContentView(R.layout.activity_main);
    List<MyFragment> fragments = new Vector<MyFragment>();
    for(int i = 0; i < 5; i++){
        MyFragment fragment = new MyFragment(CONTENT);
        fragments.add(fragment);
    }
    PagerAdapter adapter = new PagerAdapter(this.getSupportFragmentManager(),fragments);
    pager = (ViewPager) findViewById(R.id.viewpager);
    pager.setAdapter(adapter);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //method that isn't working
            PagerAdapter adapter = (PagerAdapter)pager.getAdapter();
            for(int i = 0; i < 5; i++){
                MyFragment fragment = (MyFragment) adapter.getItem(i);
                fragment.textView.setText(fragment.content[1]);
            }
        }
    });
}
}
@H_419_7@碎片

@H_419_7@

public class MyFragment extends Fragment{

String[] content;
    TextView textView;

public MyFragment(String[] content) {
    this.content = content;
}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) {
    View view = inflater.inflate(R.layout.fragment_content,container,falsE);
    textView = (TextView) view.findViewById(R.id.textView1);
    textView.setText(content[0]);
    return view;
}

}
@H_419_7@和FragmentPagerAdapter

@H_419_7@

public class PagerAdapter extends FragmentPagerAdapter{

List<MyFragment> fragments;

public PagerAdapter(FragmentManager fm,List<MyFragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override
public Fragment getItem(int arg0) {
    return fragments.get(arg0);
}

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

}
@H_419_7@每当我尝试从适配器访问一个小于adapter.getCurrentItem() – 1或大于adapter.getCurrentItem()1的片段时,OnClick方法会给我一个NullPointerException.

@H_419_7@有关如何同时更新所有片段的任何想法?

@H_419_7@提前致谢.

解决方法

更新这些片段的最简单方法是使用您的代码并将ViewPager在内存中保存的片段数设置为总片段数 – 1(因此无论您在哪个页面,所有片段都有效).在你的情况下: @H_419_7@

@H_419_7@

pager.setOffscreenPageLimit(4); // you have 5 elements
@H_419_7@您仍然可以使用我的注释中的方法onPageScrollStateChanged(因此更新将在用户开始滑动的那一刻开始)以查看用户何时开始滑动寻呼机并将片段更新到当前可见的左侧和右侧片段,但这有点难以正确,所以我建议使用第一个选项.

@H_419_7@关于包含片段的代码的一些要点:

@H_419_7@如果嵌套片段类,则将其设置为静态,这样就不会将其绑定到活动对象.
认值之外,不要为Fragment创建构造函数.如果框架需要重新创建片段,它将调用认构造函数,如果它不可用,它将抛出异常.例如,尝试更改手机/模拟器的方向,看看会发生什么(这是Android重新创建片段的情况之一).最后,使用ViewPager适配器的@L_675_40@名称,使用PagerAdapter,这是FragmentViewPager超类的名称,对于阅读代码的人来说,这非常令人困惑.

@H_419_7@如果需要将数据传递给Fragment,可以使用如下所示的创建方法

@H_419_7@

public static MyFragment newInstance(String text) {
        MyFragment f = new MyFragment();
        Bundle b = new Bundle();
        b.putString("content",text);
        f.setArguments(b);
        return f;
    }
@H_419_7@使用getArguments().getString(“content”);可以在MyFragment中使用该文本.

大佬总结

以上是大佬教程为你收集整理的android – 从ViewPager中的Activity更新片段全部内容,希望文章能够帮你解决android – 从ViewPager中的Activity更新片段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。