做为一个小白,刚开始学Android,遇到Fragment和ViewPager一块儿运用的场景的时候,初期一大部分知识都是参考网上博客,可是这样有一个问题,每一个人针对内容不一样,工具不一样,并且不必定都是很好的实现方法。因此我仍是结合了一些大神的方法,写了一个目前我以为是最好的一个实现方法,固然,仅供参考,仍是建议本身手动敲。java
项目地址:https://github.com/PeachLuis/AndroidReStudy/tree/master
当中的recycler_view当中android
BaseRecyclerView:git
public class BaseRecyclerView extends LuisApplication { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //由于是TabLayout,因此这里须要将actionBar隐藏 ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { getSupportActionBar().hide(); } setContentView(R.layout.activity_base_recycler_view); }
BaseRecyclerView的xml文件:github
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".activity.item_activity.recycler_view.BaseRecyclerView"> <android.support.design.widget.TabLayout android:id="@+id/recycler_tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/recycler_viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </LinearLayout>
这些都是老生常谈的内容,也不须要过多讲解,直接看代码把web
Item:ide
public class Item { private int mImageRes; private String mName; public Item(int mImageRes, String mName) { this.mImageRes = mImageRes; this.mName = mName; } public Item() { } public int getmImageRes() { return mImageRes; } public void setmImageRes(int mImageRes) { this.mImageRes = mImageRes; } public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } }
ItemAdapter:svg
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> { private List<Item> mDatas = new ArrayList<>(); public ItemAdapter(List<Item> mDatas) { this.mDatas = mDatas; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.base_recyclerview_item, viewGroup, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { Item item = mDatas.get(i); viewHolder.itemImage.setImageResource(item.getmImageRes()); viewHolder.itemDescription.setText(item.getmName()); } @Override public int getItemCount() { return mDatas.size() ; } static class ViewHolder extends RecyclerView.ViewHolder{ ImageView itemImage; TextView itemDescription; ViewHolder(@NonNull View itemView) { super(itemView); itemImage = itemView.findViewById(R.id.recycler_item_image); itemDescription = itemView.findViewById(R.id.recycler_item_description); } } }
RecyclerView每一个小的item的xml文件–base_recyclerview_item工具
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp"> <ImageView android:id="@+id/recycler_item_image" android:layout_width="30dp" android:layout_height="30dp" android:src="@mipmap/ic_launcher" android:scaleType="centerCrop"/> <TextView android:id="@+id/recycler_item_description" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我是textView" android:textSize="20sp"/> </LinearLayout>
TabFragment_Recycler:ui
public class TabFragment_Recycler extends Fragment { private int mTitleID; private List<Item> mDatas = new ArrayList<>(); public static TabFragment_Recycler newInstance(int titleID) { Bundle args = new Bundle(); args.putInt("RecyclerTab", titleID); TabFragment_Recycler fragment = new TabFragment_Recycler(); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { mTitleID = args.getInt("RecyclerTab"); } initData(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.base_recyclerview_fragment, container, false); initView(view); return view; } private void initData() { for (int i = 0; i < 80; i++) { mDatas.add(new Item(R.mipmap.ic_launcher,"这是第"+i+"个item")); } } private void initView(View view) { RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.base_recyclerView); switch (mTitleID) { case 0: //第一个Tab内容 LinearLayoutManager layoutManager = new LinearLayoutManager(LuisApplication.getContext()); recyclerView.setLayoutManager(layoutManager); break; case 1: //第二个Tab内容 GridLayoutManager layoutManager1 = new GridLayoutManager(LuisApplication.getContext(), 2); recyclerView.setLayoutManager(layoutManager1); break; case 2: //第三个Tab内容 StaggeredGridLayoutManager layoutManager2 = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager2); break; default: break; } ItemAdapter adapter = new ItemAdapter(mDatas); recyclerView.setAdapter(adapter); } }
public class BaseRecyclerView extends LuisApplication { private TabLayout mTabLayout; private ViewPager mViewpager; private String[] mTitles = {"线性列表", "单排2个item", "瀑布流"}; private List<Fragment> fragmentList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //由于是TabLayout,因此这里须要将actionBar隐藏 ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { getSupportActionBar().hide(); } setContentView(R.layout.activity_base_recycler_view); initView(); } private void initView() { mTabLayout = (TabLayout) findViewById(R.id.recycler_tabLayout); mViewpager = (ViewPager) findViewById(R.id.recycler_viewPager); //这里使用newInstance方法建立Fragment和添加新的Tab for (int i=0;i<mTitles.length;i++) { fragmentList.add(TabFragment_Recycler.newInstance(i)); mTabLayout.addTab(mTabLayout.newTab()); } //这里添加Adapter mViewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public int getCount() { return fragmentList.size(); } //这里用来设置标题 @Nullable @Override public CharSequence getPageTitle(int position) { return mTitles[position]; } }); //这里添加一个接口 mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); mTabLayout.setupWithViewPager(mViewpager); } }
项目地址:https://github.com/PeachLuis/AndroidReStudy/tree/master
当中的recycler_view当中this