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'
}
使用:
-
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;
}
}
}
给自己做个广告,欢迎使用