目录
代码
主要就是修改了LInearAdapter
LinearAdapter
package com.example.myapplication.recyclerview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.bumptech.glide.Glide;
import com.example.myapplication.R;
import java.util.List;
public class LinearAdapter extends RecyclerView.Adapter<ViewHolder> {
private Context mcontext;
// private List<String> list;
public LinearAdapter(Context context){
this.mcontext=context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType==0)
//ViewHold零号
return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.layout_linear_item,parent,false));
else
//ViewHold一号
return new LinearViewHolder2(LayoutInflater.from(mcontext).inflate(R.layout.layout_linear_item2,parent,false));
}
@Override
public int getItemViewType(int position) {
//注意到onCreateViewHolder的第二个参数是viewType,即可以通过改变viewType来控制返回的ItemView
//这里演示的通过position奇偶性其实并不需要单独列一个方法,但日后ViewType更多样,判断方法更复杂时单独提取一个方法会更好
if(position%2==0)
return 0;
else
return 1;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
if (getItemViewType(position) == 0) {
//ViewHold零号
((LinearViewHolder) holder).textView.setText("新的蕾姆已经出现");
//加个点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mcontext, "点击" + position, Toast.LENGTH_SHORT).show();
}
});
} else {
//ViewHold一号
((LinearViewHolder2) holder).textView.setText("我爱蕾姆");
Glide.with(mcontext).load("https://imgsa.baidu.com/forum/w%3D580%3B/sign=6f952c5c77cb0a4685228b315b58f724/cb8065380cd79123f4bb5ad2a1345982b2b78039.jpg").into(((LinearViewHolder2) holder).imageView);
//加个点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mcontext, "点击" + position, Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public int getItemCount() {
return 30;
}
class LinearViewHolder extends ViewHolder{
private TextView textView;
public LinearViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.tv_title);
}
}
class LinearViewHolder2 extends ViewHolder{
private TextView textView;
private ImageView imageView;
public LinearViewHolder2(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.tv_title);
imageView=itemView.findViewById(R.id.iv_image);
}
}
}
layout_linear_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textColor="#03A9F4"
android:textSize="20sp"
android:text="蕾姆"
android:background="#FFFFFF"/>
<!--layout 宽度和高度那里不同的模式会有不同的效果,可以切换试试看-->
</LinearLayout>
layout_linear_item2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textColor="#03A9F4"
android:textSize="20sp"
android:text="蕾姆"
android:background="#FFFFFF"/>
<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorGrey"/>
<!--layout 宽度和高度那里不同的模式会有不同的效果,可以切换试试看-->
</LinearLayout>
效果
一些理解
1 ViewHolder
2 getItemViewType
3 强制类型转换为子类
我这里的 ImageView还是选择了使用网络图片