需要有关制作高效滑动视图的指导

时间:2017-04-26 05:32:06

标签: android android-fragments android-viewpager fragmentstatepageradapter

新的Android和最近学习的滑动视图。在我的应用程序中,它有17章,在每章中,将有30页包含一些文本数据,用户可以刷卡。我需要使用FragmentStatePagerAdapter来节省内存,但我需要知道我需要制作510 Fragment对象,意味着510 XML布局?我只需要更改每个页面中的文本,并且我已经看到很多人使用像这样的开关语句

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return  new FragmentOne();
        case 1:
            return  new FragmentTwo();
        default:
            break;
    }
    return null;
}

我/我应该每章写30个案例吗?或者有更好的方法吗?我用Google搜索并看过很多Youtube视频,但无法找到解决方案。我要求每个人,如果你正在回答或评论,请解释你的代码,因为我相信学习,而不是复制粘贴。

2 个答案:

答案 0 :(得分:0)

使用 FragmentStatePagerAdapter 是正确的方法。它将根据您设置的viepager offscreenLimit()管理片段状态。

在您的情况下,您可以只有一个片段和一个文本的数组列表,并根据位置给出不同的文本。

像这样......

List<String> yourList = new ArrayList<>();

@Override
public Fragment getItem(int position) {
    return new YourFragment(yourList.get(position));
}

答案 1 :(得分:-1)

这是一个容易愚蠢的人!

您只需要一个Fragment对象,这里是代码

public class FragmentChild extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    // INFLATE THE LAYOUT THAT EACH FRAGMENT OBJECT WILL HAVE, PUT IT IN A VIEW
     View root = inflater.inflate(R.layout.couplets, container, false);

    // RECEIVE THE BUNDLE DATA SENT (ARGUMENTS)
    Bundle args = getArguments();

    // CREATE AN ARRAY LIST OF STRINGS THAT WILL HOLD TEXT
    ArrayList<String> someText = new ArrayList<>();
someText.add("one");
someText.add("two");
someText.add("three");
TextView txt = (TextView) root.findViewById(R.id.text_view);
    txt.setText(someText.get(args.getInt("position")));
return root;
}

自定义寻呼机适配器

class MyFragmentAdapter extends FragmentStatePagerAdapter {

 MyFragmentAdapter(FragmentManager fm) {super(fm);}

@Override
public Fragment getItem(int position) {
    Bundle args = new Bundle();
    args.putInt("position", position);

    Fragment fragment = new FragmentChild();
    fragment.setArguments(args);
    return fragment;
}

@Override
public int getCount() {
    return 3;
}
}

最后主持活动

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chapter_one);

    // FIND THE VIEWPAGER AND SET THE CUSTOM ADAPTER TO IT TO PROVIDE CHILD PAGES
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
    }
}