在制作高效的滑动视图方面需要指导
Need guidance in making efficient swipe views
android 的新手,最近学习了一些滑动视图。在我的应用程序中,它有 17 章,每章有 30 页,其中包含一些文本数据,用户可以滑动浏览。我需要使用 FragmentStatePagerAdapter 来节省内存,但我需要知道我是否需要制作 510 个 Fragment 对象,即 510 XML 布局?我只需要更改每个页面中的文本,我已经看到很多人使用这样的 switch 语句
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
default:
break;
}
return null;
}
难道I/Should我每章写30个案例?还是有更好的方法来做到这一点?我用谷歌搜索并看过很多 Youtube 视频,但找不到解决方案。我请求大家,如果你在回答或评论,请解释你的代码,因为我相信学习,而不是复制粘贴。
使用 FragmentStatePagerAdapter 是正确的方法。它将根据您设置的 viepager offscreenLimit() 来管理片段状态。
在您的情况下,您可以只有一个片段和一个文本数组列表,并根据位置给出不同的文本。
像这样..
List<String> yourList = new ArrayList<>();
@Override
public Fragment getItem(int position) {
return new YourFragment(yourList.get(position));
}
这很简单!
你只需要一个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;
}
}
最后主持人 activity
@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);
}
}
android 的新手,最近学习了一些滑动视图。在我的应用程序中,它有 17 章,每章有 30 页,其中包含一些文本数据,用户可以滑动浏览。我需要使用 FragmentStatePagerAdapter 来节省内存,但我需要知道我是否需要制作 510 个 Fragment 对象,即 510 XML 布局?我只需要更改每个页面中的文本,我已经看到很多人使用这样的 switch 语句
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
default:
break;
}
return null;
}
难道I/Should我每章写30个案例?还是有更好的方法来做到这一点?我用谷歌搜索并看过很多 Youtube 视频,但找不到解决方案。我请求大家,如果你在回答或评论,请解释你的代码,因为我相信学习,而不是复制粘贴。
使用 FragmentStatePagerAdapter 是正确的方法。它将根据您设置的 viepager offscreenLimit() 来管理片段状态。
在您的情况下,您可以只有一个片段和一个文本数组列表,并根据位置给出不同的文本。
像这样..
List<String> yourList = new ArrayList<>();
@Override
public Fragment getItem(int position) {
return new YourFragment(yourList.get(position));
}
这很简单!
你只需要一个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;
}
}
最后主持人 activity
@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);
}
}