一个小demo 点击图片更换线性与网格布局,多条目加载,RecyclerView的点击事件都有。
点击切换线性与网格布局
多条目加载与点击事件
public class MainActivity extends AppCompatActivity {
private RecyclerView mRv;
private ImageView mRight;
private List<CatagoryBean.DataBean> list = new ArrayList<>();
private Handler handler = new Handler(Looper.getMainLooper());
private MyAdapter adapter;
private boolean flag = true;
private RecyclerView mReView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//请求接口数据
Request request = new Request.Builder().url("http://120.27.23.105/product/getCatagory").build();
new OkHttpClient().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final CatagoryBean catagoryBean = new Gson().fromJson(string, CatagoryBean.class);
handler.post(new Runnable() {
@Override
public void run() {
list.addAll(catagoryBean.getData());
// adapter.notifyDataSetChanged();
adapter = new MyAdapter(MainActivity.this, list);
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
mRv.setLayoutManager(manager);
mRv.setAdapter(adapter);
adapter.setOnItemClick(new MyAdapter.OnItemClick() {
@Override
public void OnItemClick(int pos) {
Toast.makeText(MainActivity.this,"测试"+pos,Toast.LENGTH_SHORT).show();
}
});
}
});
}
});
//点击切换
mRight.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (flag) {
adapter.notifyDataSetChanged();
adapter = new MyAdapter(MainActivity.this, list);
mRight.setImageDrawable(getResources().getDrawable(R.mipmap.grid_icon));
GridLayoutManager manager = new GridLayoutManager(MainActivity.this, 3);
mRv.setLayoutManager(manager);
mRv.setAdapter(adapter);
/*监听*/
flag = false;
adapter.setOnItemClick(new MyAdapter.OnItemClick() {
@Override
public void OnItemClick(int pos) {
Toast.makeText(MainActivity.this,"测试"+pos,Toast.LENGTH_SHORT).show();
}
});
} else {
adapter.notifyDataSetChanged();
adapter = new MyAdapter(MainActivity.this, list);
mRight.setImageDrawable(getResources().getDrawable(R.mipmap.lv_icon));
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
mRv.setLayoutManager(manager);
mRv.setAdapter(adapter);
flag = true;
}
return false;
}
});
}
private void initView() {
mRight = (ImageView) findViewById(R.id.right);
mRv = (RecyclerView) findViewById(R.id.re_view);
}
}
适配器
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE1 = 0;
private static final int TYPE2 = 1;
private Context context;
private List<CatagoryBean.DataBean> list;
private int count;
public MyAdapter(Context context, List<CatagoryBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case TYPE1:
View view1 = LayoutInflater.from(context).inflate(R.layout.rv_item, parent, false);
holder = new MyViewholder1(view1);
break;
case TYPE2:
View view2 = LayoutInflater.from(context).inflate(R.layout.rv_item1, parent, false);
holder = new MyViewHolder2(view2);
break;
}
return holder;
}
/*创建一个接口 用于设置条目点击*/
public interface OnItemClick {
void OnItemClick(int pos);
}
private OnItemClick onItemClick;
/*
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}*/
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
CatagoryBean.DataBean dataBean = list.get(position);
switch (getItemViewType(position)) {
case TYPE1:
MyViewholder1 myViewholder1 = (MyViewholder1) holder;
myViewholder1.tv.setText(dataBean.getName());
Glide.with(context).load(dataBean.getIcon()).into(myViewholder1.iv);
myViewholder1.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick.OnItemClick(position);
}
});
break;
case TYPE2:
MyViewHolder2 myViewHolder2 = (MyViewHolder2) holder;
myViewHolder2.tv.setText(dataBean.getName());
myViewHolder2.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick.OnItemClick(position);
}
});
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
public int getItemViewType(int position) {
/*return position % 2 == 0 ? TYPE1 : TYPE2;*/
return TYPE1;
}
class MyViewholder1 extends RecyclerView.ViewHolder {
private final ImageView iv;
private final TextView tv;
public MyViewholder1(View itemView) {
super(itemView);
iv = itemView.findViewById(R.id.iv);
tv = itemView.findViewById(R.id.tv);
}
}
class MyViewHolder2 extends RecyclerView.ViewHolder {
private final TextView tv;
public MyViewHolder2(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
item_xml1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="vertical"
android:gravity="center_vertical">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
引用RecyclerView布局在main_xim里面<ImageView android:layout_width="40dp" android:layout_height="40dp" android:id="@+id/right" android:src="@mipmap/grid_icon" android:layout_alignParentRight="true" />