您的位置:首页 > 其它

RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)

2017-08-29 18:42 369 查看
基类: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 savedInstance
c9ab
State) {
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);
}
}
}


github地址:https://github.com/hushendian/RecycleViewDemo.git

效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: