基类:BaseListAdapter
public abstract class BaseListAdapter<M, VH extends RecyclerView.ViewHolder> extends RecyclerView
.Adapter<VH> {
protected List<M> list;
protected Context context;
public BaseListAdapter(Context context, List<M> list, View v) {
this.context = context;
this.list = list;
}
@Override
public int getItemCount() {
Log.d("BaseListAdapter", "getItemCount: " + list.size());
return list.size();
}
protected M getItem(int position) {
return list.get(position);
}
}
实现类 :RecyleViewAdapter
public class RecyleViewAdapter extends BaseListAdapter<Student, RecyleViewAdapter.ViewHolder> {
public RecyleViewAdapter(Context context, List<Student> list, View v) {
super(context, list,v);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R
.layout
.item_recycle, parent, false));
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String name = null;
switch (getItemViewType(position)) {
case 0:
name = list.get(position).getName();
break;
case 1:
name = "heheheheheheheh";
break;
}
holder.studentName.setText(name);
}
@Override
public int getItemViewType(int position) {
if (0 == list.get(position).getFlag()) {
return 0;
} else if (1 == list.get(position).getFlag()) {
return 1;
}
return 0;
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView studentName;
public ViewHolder(View itemView) {
super(itemView);
studentName = itemView.findViewById(R.id.studentName);
}
}
}
Listener:
public abstract class OnRecyclerItemClickListener extends RecyclerView.SimpleOnItemTouchListener {
private GestureDetectorCompat mGestureDetectorCompat;
private RecyclerView recyclerView;
public OnRecyclerItemClickListener(final RecyclerView recyclerView) {
this.recyclerView = recyclerView;
mGestureDetectorCompat = new GestureDetectorCompat(recyclerView.getContext(), new
GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder
(childView);
onItemClick(viewHolder);
}
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder
(childView);
onItemLongClick(viewHolder);
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetectorCompat.onTouchEvent(e);
return false;
}
public abstract void onItemClick(RecyclerView.ViewHolder v);
public abstract void onItemLongClick(RecyclerView.ViewHolder v);
}
基类Activity:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initVariables();
initView(savedInstanceState);
loadData();
}
protected void initVariables() {};
protected void initView(Bundle savedInstanceState) {};
protected void loadData() {};
}
具体实现:RecycleViewActivity
public class RecycleViewActivity extends BaseActivity {
@Nullable
@BindView(R.id.recycleView)
RecyclerView recyclerView;
List<Student> list;
@Override
protected void initView(Bundle savedInstanceState) {
setContentView(R.layout.activity_recycle_view);
ButterKnife.bind(this);
Log.d("RecycleViewActivity", "initView: " + recyclerView);
}
@Override
protected void initVariables() {
initData();
}
@Override
protected void loadData() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Log.d("RecycleViewActivity", "loadData: " + list);
recyclerView.setAdapter(new RecyleViewAdapter(this, list, null));
recyclerView.addOnItemTouchListener(new OnRecyclerItemClickListener(recyclerView ) {
@Override
public void onItemClick(RecyclerView.ViewHolder v) {
Toast.makeText(RecycleViewActivity.this, "点击了" + v.getLayoutPosition(), Toast
.LENGTH_SHORT).show();
}
@Override
public void onItemLongClick(RecyclerView.ViewHolder v) {
Toast.makeText(RecycleViewActivity.this, "长按了" + v.getLayoutPosition(), Toast
.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
ButterKnife.bind(this).unbind();
}
protected void initData() {
list = new ArrayList<Student>();
for (int i = 0; i < 30; i++) {
Student student = new Student();
student.setName("学生" + i);
Random random = new Random();
int a = random.nextInt(2);
Log.d("RecycleViewActivity", "initData: " + a);
student.setFlag(a);
list.add(student);
}
}
}
效果图: