RecyclerView的用法
1. 适配器:
public class Adapter extends RecyclerView.Adapter <Adapter.MyViewHolder> implements View.OnClickListener , View.OnLongClickListener {
private List<String> list;
private Context mContext;
private OnItemClickListener monItemClickListener;
public Adapter(List<String> list, Context mContext) {
this.list = list;
this.mContext = mContext;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.activity_item,parent,false);
view.setOnClickListener(this);
view.setOnLongClickListener(this);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.itemView.setTag(position);
holder.textView.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onClick(View v) {
if (monItemClickListener!=null){
monItemClickListener.OnItemClick(v, (Integer) v.getTag());
}
}
@Override
public boolean onLongClick(View v) {
if (monItemClickListener!=null){
monItemClickListener.OnItemLongClick(v, (Integer) v.getTag());
}
return true;
}
public void removeData(int position){
list.remove(position);
notifyItemRemoved(position);
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.textView);
}
}
public interface OnItemClickListener{
void OnItemClick(View view,int position);
void OnItemLongClick(View view,int position);
}
public void setOnItemClickListener(OnItemClickListener monItemClickListener){
this.monItemClickListener=monItemClickListener;
}
}
2.自定义分割线
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{
android.R.attr.listDivider
};
public static final int HORIZONTAL_LIST = LinearLayout.HORIZONTAL;
public static final int VERTICAL_LIST = LinearLayout.VERTICAL;
private Drawable mDivider;
private int mOrientaton;
public DividerItemDecoration(Context context, int mOrientaton) {
final TypedArray a =context.obtainStyledAttributes(ATTRS);
mDivider=a.getDrawable(0);
a.recycle();
}
public void setmOrientaton(int orientation){
if (orientation!=HORIZONTAL_LIST&&orientation!=VERTICAL_LIST){
throw new IllegalArgumentException("invalid orientation");
}
mOrientaton = orientation;
}
@Override
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent) {
if (mOrientaton==VERTICAL_LIST){
drawVertical(c,parent);
}else {
drawHorizontal(c,parent);
}
}
public void drawVertical(Canvas c,RecyclerView parent){
final int left = parent.getPaddingLeft();
final int right = parent.getWidth()-parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i=0;i<childCount;i++){
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom()+params.bottomMargin;
final int bottom = top+mDivider.getIntrinsicHeight();
mDivider.setBounds(left,top,right,bottom);
mDivider.draw(c);
}
}
public void drawHorizontal(Canvas c,RecyclerView parent){
final int top = parent.getPaddingTop();
final int bottom = parent.getHeight()-parent.getPaddingBottom();
final int childCount = parent.getChildCount();
for (int i=0;i<childCount;i++){
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight()+params.rightMargin;
final int right = left+mDivider.getIntrinsicWidth();
mDivider.setBounds(left,top,right,bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(@NonNull Rect outRect, int itemPosition, @NonNull RecyclerView parent) {
if (mOrientaton == VERTICAL_LIST){
outRect.set(0,0,0,mDivider.getIntrinsicHeight());
}else {
outRect.set(0,0,mDivider.getIntrinsicWidth(),0);
}
}
}
3.Activity中的程序
recyclerView = findViewById(R.id.recyc);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
adapter = new Adapter(list,MainActivity.this);
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL));
adapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
@Override
public void OnItemClick(View view, int position) {
Toast.makeText(MainActivity.this,"点击"+position+"条",Toast.LENGTH_SHORT).show();
}
@Override
public void OnItemLongClick(View view, final int position) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("确认!")
.setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.removeData(position);
}
})
.show();
}
});