现在项目中遇到有帮助中心展示一个app的使用方法,由于要用到的页面很多,所以不可能每个都去写一个专门处理的东西,比较麻烦,现在就是想要将处理左右侧滑viewPager简单点的东西,比如说我这边的只是单纯的展示图片而已,那么这边就是最好抽象出一个东西出来然后别的具体的页面直接使用就完了那种。
最早的想法是将每个fragment放进一个list中去,但是这样的话图片过多一点会引起崩溃的。那么问题就来了 该怎么办呢?答案就是在将各个页面变成一个fragment之后加入到一个list中去,这样会很耗内存哒。然后崩溃就是肯定的啦
那么,该怎么办呢
其实我最初的想法就是将图片资源的ID放进去然后就不管了,但是不知道为啥鬼使神差的就写成了上面那个版本具体代码如下:适配器
/**
* Created by cc on 2016/11/14.
*
*/
public class MyNewPagerViewAdapter extends FragmentStatePagerAdapter{
private ArrayList<Integer> resource;
public MyNewPagerViewAdapter(FragmentManager fm, ArrayList<Integer> resource) {
super(fm);
this.resource = resource;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(resource.get(position));
}
@Override
public int getCount() {
return resource.size();
}
}
fragment
/**
* Created by Administrator on 2016/11/14.
*
*/
public class ArrayListFragment extends Fragment {
private int id;
public static ArrayListFragment newInstance(int resource) {
ArrayListFragment fragment = new ArrayListFragment();
Bundle args = new Bundle();
args.putInt("id",resource);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
id = getArguments().getInt("id");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout.LayoutParams viewParams;
View view= new View(getActivity().getBaseContext());
viewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
view.setLayoutParams(viewParams);
view.setBackgroundResource(id);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
将即将要使用到的页面或者类抽象出来
/**
* Created by cc on 2016/11/14.
*
*/
public abstract class Help extends Fragment {
public ArrayList<Integer> list = new ArrayList<>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.page_black, null);
initData(view);
init(view);
return view;
}
/**
* 初始化图片数据
* @param view fragment
*/
public abstract void initData(View view) ;
public void init(View view) {
ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewPager);
viewPager.setAdapter(new MyNewPagerViewAdapter(getChildFragmentManager(),list));
ImageView back = (ImageView) view.findViewById(R.id.viewPager_back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.realtabcontent,new HelpCenter());
transaction.commit();
}
});
}
}
具体使用调用时的用法
/**
* Created by Administrator on 2016/11/14.
*
*/
public class ElectricHelp extends Help{
@Override
public void initData(View view) {
TextView textView= (TextView) view.findViewById(R.id.viewPager_tv);
textView.setText("电厂信息");
list.add(R.drawable.electric_guid1);
list.add(R.drawable.electric_guid2);
list.add(R.drawable.electric_guid3);
list.add(R.drawable.electric_guid4);
list.add(R.drawable.electric_guid5);
list.add(R.drawable.electric_guid6);
}
}
就这样就完了,以后如果还涉及到什么简单的只用展示页面的viewPager的话直接修改最后一个类的里面的图片资源就可以了,多少张没有限制。
至于界面文件相当简单就给个layout然后给个ID就可以了,至于横着排竖着排看心情,欧拉~