自定義RecyclerView,實現ListView、GridView、ViewPager功能

CommonRecyclerView

通用的RecyclerView,實現了RecyclerView、GridView、ViewPager功能

How to To get a Git project into your build:

Step 1. Add the JitPack repository to your build file

gradle maven sbt leiningen Add it in your root build.gradle at the end of repositories:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2. Add the dependency

dependencies {
        implementation 'com.github.bsmmaoshenbo:CommonRecyclerView:Tag'
}

使用:

  1. xml:直接xml引用

<?xml version="1.0" encoding="utf-8"?>
 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

     <com.dijkstra.common.CommonRecyclerView
         android:id="@+id/recycler_view_center"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 </android.support.constraint.ConstraintLayout>

代碼調用:以垂直list爲例

/**
  * @Description: 普通list
  * @Author: maoshenbo
  * @Date: 2018/11/6 16:01
  * @Version: 1.0
  */
 public class ListActivity extends AppCompatActivity {

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


         final CommonRecyclerView recyclerViewCenter = findViewById(R.id.recycler_view_center);

         recyclerViewCenter.setOnNestedScrollingEnabled(false)
             .noSpring()
             .setListType(CommonRecyclerView.LIST_TYPE_NORMAL)
             .setOrientation(CommonRecyclerView.VERTICAL)
             .addItemDecoration(new RecycleViewItemDecoration(RecycleViewItemDecoration.VERTICAL_LIST, dp2px(this, 5)));

         final ListAdapter adapter = new ListAdapter();
         recyclerViewCenter.setAdapter(adapter);//設置adapter
         adapter.setOnItemClickListener(new BaseRecyclerViewAdapter.OnItemClickListener() {
         @Override
         public void onItemClickListener(View v, int position) {
             SensorInfo sensorInfo = adapter.getData().get(position);
             sensorInfo.name = "小馬";
         }
         });
         adapter.setOnItemLongClickListener(new BaseRecyclerViewAdapter.OnItemLongClickListener() {
         @Override
         public void onItemLongClickListener(View v, int position) {

         }
         });

         Button headerView = new Button(this);
         headerView.setText("點我加一個條目");
         adapter.addHeaderView(headerView);
         headerView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             adapter.insertItem(new SensorInfo("gyroscope", "陀螺儀", R.mipmap.ic_launcher_round), 1);//增加條目
         }
         });


         Button footerView = new Button(this);
         footerView.setText("點我減一個條目");
         adapter.addFooterView(footerView);
         footerView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             adapter.removeItem(3);//刪除條目
         }
         });

         RViewModel viewModel = ViewModelProviders.of(this).get(RViewModel.class);
         viewModel.getCenterLiveData.observe(this, new Observer<List<SensorInfo>>() {
         @Override
         public void onChanged(@Nullable List<SensorInfo> sensorInfos) {
             adapter.setData(sensorInfos);//填充數據
             adapter.refreshData(sensorInfos, false);
         }
         });
         viewModel.getLiveData().setValue(true);
     }

     public static int dp2px(Context context, int dp) {
         return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
     }
 }

adapter:重寫三個方法

/**
  * @Description: adapter
  * @Author: maoshenbo
  * @Date: 2018/11/6 11:58
  * @Version: 1.0
  */
 public class ListAdapter extends BaseRecyclerViewAdapter<SensorInfo> {
 
     @Override
     public int[] initLayouts() {
         return new int[]{R.layout.recycler_view_vel, R.layout.recycler_view_vel_2};
     }
 
     @Override
     protected int initViewType(SensorInfo data, int[] layoutIds, int position) {
         int viewType;
         if (position == 0) {
             viewType = layoutIds[0];
         } else {
             viewType = layoutIds[1];
         }
         return viewType;
     }
 
     @Override
     protected void bindData(BaseRecyclerViewHolder holder, int position, SensorInfo data) {
         int type = holder.getItemViewType();
 
         View view = holder.getItemView();
         view.setEnabled(true);
 
         switch (type) {
             case R.layout.recycler_view_vel:
                 TextView tvName = holder.getView(R.id.tv_name);
                 tvName.setText(data.name);
                 break;
             case R.layout.recycler_view_vel_2:
 //                tvName.setText(String.format("%s我是第二個", data.name));
                 break;
         }
     }
 }

給自己做個廣告,歡迎使用

gitHub地址:https://github.com/bsmmaoshenbo/CommonRecyclerView

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章