RecyclerView之 多布局适配器

 

Gson gson = new Gson();
Type type = new TypeToken<List<JsonBean>>() {
}.getType();

 

package app.jiyun.com.android_yuekao_test.adapter;

import android.content.Context;
import android.support.annotation.IdRes;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.List;

import app.jiyun.com.android_yuekao_test.R;
import app.jiyun.com.android_yuekao_test.bean.MyData;

/**
* Created by lvxinxin on 2017/11/10.
* RecycleView多布局
*/

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
public static final int ONE_ITEM = 1;
public static final int TWO_ITEM = 2;
public static final int Three_ITEM = 3;
private List<MyData.ResultBean.DataBean> mList;
private Context mContext;

public MyAdapter(List<MyData.ResultBean.DataBean> mList, Context mContext) {
this.mList = mList;
this.mContext = mContext;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
RecyclerView.ViewHolder holder;
View inflate;
if (ONE_ITEM == viewType) {
inflate = inflater.inflate(R.layout.item_one, parent, false);
holder = new ViewHolderOne(inflate);
} else if (TWO_ITEM == viewType) {
inflate = inflater.inflate(R.layout.item_two, parent, false);
holder = new ViewHolderTwo(inflate);
} else {
inflate = inflater.inflate(R.layout.item_three, parent, false);
holder = new ViewHolderThree(inflate);

}
inflate.setOnClickListener(this);
return holder;
}

//holder因为是多布局所以我这个holder有多个实例
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyData.ResultBean.DataBean dataBean = mList.get(position);
//参数1是否是参数2 的一个实例对象
if (holder instanceof ViewHolderOne) {
Glide.with(mContext).load(dataBean.getUrl()).into(((ViewHolderOne) holder).mImage);
((ViewHolderOne) holder).mText.setText(dataBean.getContent());
((ViewHolderOne) holder).itemView.setTag(position);
} else if (holder instanceof ViewHolderTwo) {
Glide.with(mContext).load(dataBean.getUrl()).into(((ViewHolderTwo) holder).mImage);
((ViewHolderTwo) holder).mText.setText(dataBean.getContent());
((ViewHolderTwo) holder).itemView.setTag(position);
} else {
Glide.with(mContext).load(dataBean.getUrl1()).into(((ViewHolderThree) holder).mImageOne);
Glide.with(mContext).load(dataBean.getUrl2()).into(((ViewHolderThree) holder).mImageTwo);
((ViewHolderThree) holder).mTextOne.setText(dataBean.getContent());
((ViewHolderThree) holder).mTextTwo.setText(dataBean.getContent());
((ViewHolderThree) holder).itemView.setTag(position);
}

}
//这个是用来判断什么时候显示某个布局的
//先执行这个方法 因为是根据ViewType创建ViewHolder的


@Override
public int getItemViewType(int position) {
// MyData.ResultBean.DataBean dataBean = mList.get(position);
// dataBean.getType();
if (position <= 3) {
return ONE_ITEM;
} else if (position == 4) {
return TWO_ITEM;
} else {
return Three_ITEM;
}
}

@Override
public int getItemCount() {
return mList.isEmpty() ? 0 : mList.size();
}


class ViewHolderOne extends RecyclerView.ViewHolder {
private ImageView mImage;
private TextView mText;

public ViewHolderOne(View itemView) {
super(itemView);
mImage = (ImageView) itemView.findViewById(R.id.One_Item_Image);
mText = (TextView) itemView.findViewById(R.id.One_Item_Text);
}
}

class ViewHolderTwo extends RecyclerView.ViewHolder {
private ImageView mImage;
private TextView mText;

public ViewHolderTwo(View itemView) {
super(itemView);
mImage = (ImageView) itemView.findViewById(R.id.Two_Item_Image);
mText = (TextView) itemView.findViewById(R.id.Two_Item_Text);
}

}

class ViewHolderThree extends RecyclerView.ViewHolder {
private ImageView mImageOne, mImageTwo;
private TextView mTextOne, mTextTwo;

public ViewHolderThree(View itemView) {
super(itemView);
mImageOne = (ImageView) itemView.findViewById(R.id.Three_Item_Image_One);
mImageTwo = (ImageView) itemView.findViewById(R.id.Three_Item_Image_Two);
mTextOne = (TextView) itemView.findViewById(R.id.Three_Item_Text_One);
mTextTwo = (TextView) itemView.findViewById(R.id.Three_Item_Text_Two);
}
}

public interface OnClickItem {
void setClick(View v, int position);
}

private OnClickItem item;

@Override
public void onClick(View v) {
if (item != null) {
item.setClick(v, (int) v.getTag());
}
}

public void setOnClick(OnClickItem item) {
this.item = item;
}

}

 

 

 

 

 

 

 

package com.example.im.android_one_week_boos.fragment;


import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.example.im.android_one_week_boos.R;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.InputStream;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

public class DFragment extends Fragment {
private RecyclerView mDRecy;
private String mUrl = "http://192.168.1.235:8080/json/array2.json";
private List<JsonBean> jsonBeanList;
private MyDListAdapter myDListAdapter;
private Context mC;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String str = (String) msg.obj;
Toast.makeText(getContext(), str, Toast.LENGTH_SHORT).show();
Gson gson = new Gson();
Type type = new TypeToken<List<JsonBean>>() {
}.getType();
jsonBeanList = gson.fromJson(str, type);
myDListAdapter = new MyDListAdapter(jsonBeanList, mC);
mDRecy.setAdapter(myDListAdapter);
myDListAdapter.setOnclickLister1(new MyDListAdapter.MyInter1() {
@Override
public void setResult1(int position) {
String s = jsonBeanList.get(position).toString();
Toast.makeText(mC, s, Toast.LENGTH_SHORT).show();
}
});
myDListAdapter.setOnclickLister2(new MyDListAdapter.MyInter2() {
@Override
public void setResult2(int position2) {
String s = jsonBeanList.get(position2).toString();
Toast.makeText(mC, s, Toast.LENGTH_SHORT).show();
}
});
}
};

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_d, null);
mC = getActivity().getApplicationContext();
initView(inflate);
initData();
return inflate;
}

private void initData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(mUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (connection.getResponseCode() == 200) {
InputStream is = connection.getInputStream();
int len = 0;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
while ((len = is.read(b)) != -1) {
String s = new String(b, 0, len);
sb.append(s);
}
handler.obtainMessage(1, sb.toString()).sendToTarget();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}

private void initView(View inflate) {
mDRecy = (RecyclerView) inflate.findViewById(R.id.mDRecy);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mC);
mDRecy.setLayoutManager(linearLayoutManager);


}
}

 

 

 

 

 

package com.example.im.android_recy_muchitem.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.im.android_recy_muchitem.R;
import com.example.im.android_recy_muchitem.bean.MyBean;
import com.squareup.picasso.Picasso;

import java.util.List;

/**
* Created by I‘M宋国召 on 2017/12/4.
*/
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private List<MyBean> al;
private Context context;

public MyAdapter(List<MyBean> al) {
this.al = al;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
context = parent.getContext();
RecyclerView.ViewHolder holder = null;
View view;
// switch (viewType) {
// case 0:
// view = LayoutInflater.from(context).inflate(R.layout.item_one, parent, false);
// holder = new OneHolder(view);
// break;
// case 1:
// view = LayoutInflater.from(context).inflate(R.layout.item_two, parent, false);
// holder = new TwoHolder(view);
// break;
// }
if (viewType == 0) {
view = LayoutInflater.from(context).inflate(R.layout.item_one, parent, false);
holder = new OneHolder(view);
} else {
view = LayoutInflater.from(context).inflate(R.layout.item_two, parent, false);
holder = new TwoHolder(view);
}
view.setOnClickListener(this);
return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int type = al.get(position).getType();
switch (type) {
case 0:
OneHolder holder1 = (OneHolder) holder;
holder1.name_one.setText(al.get(position).getTitle());
List<MyBean.PicBean> pic = al.get(position).getPic();
MyBean.PicBean picBean = pic.get(0);
String thumbnail_pic = picBean.getThumbnail_pic();
Picasso.with(context).load(thumbnail_pic).into(holder1.img_one);
break;

case 1:
TwoHolder holder2 = (TwoHolder) holder;
holder2.name_two.setText(al.get(position).getTitle());
List<MyBean.PicBean> pic1 = al.get(position).getPic();
MyBean.PicBean picBean1 = pic1.get(0);
String thumbnail_pic1 = picBean1.getThumbnail_pic();
Picasso.with(context).load(thumbnail_pic1).into(holder2.img_two);
break;
}
}

@Override
public int getItemCount() {
return al.isEmpty() ? 0 : al.size();
}

@Override
public int getItemViewType(int position) {
return al.get(position).getType();
}

 

class OneHolder extends RecyclerView.ViewHolder {
private TextView name_one;
private ImageView img_one;

public OneHolder(View itemView) {
super(itemView);
name_one = itemView.findViewById(R.id.name_one);
img_one = itemView.findViewById(R.id.img_one);
}
}

class TwoHolder extends RecyclerView.ViewHolder {
private TextView name_two;
private ImageView img_two;

public TwoHolder(View itemView) {
super(itemView);
name_two = itemView.findViewById(R.id.name_two);
img_two = itemView.findViewById(R.id.img_two);
}
}

@Override
public void onClick(View view) {

}

 

}

 

 

 

 

 

package com.example.im.android_recy_muchitem_two.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.im.android_recy_muchitem_two.R;
import com.example.im.android_recy_muchitem_two.bean.MyBean;
import com.squareup.picasso.Picasso;

import java.util.List;

/**
* Created by I‘M宋国召 on 2017/12/5.
*/
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private static final int TYPE_ONE = 1;
private static final int TYPE_TWO = 2;
private List<MyBean.ResultBean.DataBean> al;
private Context context;

public MyAdapter(List<MyBean.ResultBean.DataBean> al) {
this.al = al;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
context = parent.getContext();
View view;
RecyclerView.ViewHolder holder;
LayoutInflater from = LayoutInflater.from(context);
if (viewType == TYPE_ONE) {
view = from.inflate(R.layout.item_one, parent, false);
holder = new HolderOne(view);
} else {
view = from.inflate(R.layout.item_two, parent, false);
holder = new HolderTwo(view);
}
view.setOnClickListener(this);
return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyBean.ResultBean.DataBean dataBean = al.get(position);
if (holder instanceof HolderOne) {
((HolderOne) holder).name_one.setText(dataBean.getTitle());
Picasso.with(context).load(dataBean.getThumbnail_pic_s()).into(((HolderOne) holder).img_one);
((HolderOne) holder).itemView.setTag(position);
} else {
((HolderTwo) holder).name_two.setText(dataBean.getTitle());
Picasso.with(context).load(dataBean.getThumbnail_pic_s()).into(((HolderTwo) holder).img_two);
((HolderTwo) holder).itemView.setTag(position);
}
}

@Override
public int getItemCount() {
return al.size();
}

@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return TYPE_ONE;
} else {
return TYPE_TWO;
}
}


class HolderOne extends RecyclerView.ViewHolder {
private ImageView img_one;
private TextView name_one;

public HolderOne(View itemView) {
super(itemView);
img_one = itemView.findViewById(R.id.item_one_img);
name_one = itemView.findViewById(R.id.item_one_name);
}
}

class HolderTwo extends RecyclerView.ViewHolder {
private ImageView img_two;
private TextView name_two;

public HolderTwo(View itemView) {
super(itemView);
img_two = itemView.findViewById(R.id.item_two_img);
name_two = itemView.findViewById(R.id.item_two_name);
}
}

@Override
public void onClick(View view) {
myInter.setResult(view, (Integer) view.getTag());
}

public interface MyInter {
void setResult(View view, int position);
}

private MyInter myInter;

public void setOnClick(MyInter inter) {
this.myInter = inter;

}


}

 

转载于:https://www.cnblogs.com/androidx/p/8035429.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 RecyclerView 时,你可以通过自定义适配器来控制数据的绑定和展示。以下是使用自定义适配器的基本步骤: 1. 创建适配器类:首先,你需要创建一个继承自 RecyclerView.Adapter 的适配器类。在适配器类中,你需要重写几个关键方法,包括 onCreateViewHolder、onBindViewHolder 和 getItemCount。 - onCreateViewHolder:用于创建 RecyclerView 的 ViewHolder 对象。在这个方法中,你需要创建一个自定义的 ViewHolder,并将对应的布局文件进行绑定。 - onBindViewHolder:用于将数据绑定到 ViewHolder 中的视图上。你可以在这个方法中设置文本、图片等视图的内容。 - getItemCount:用于返回数据集合的大小,即要展示的列表项数量。 2. 创建 ViewHolder 类:在适配器中,你需要创建一个继承自 RecyclerView.ViewHolder 的 ViewHolder 类。ViewHolder 类主要用于缓存视图项中的子视图,以便在绑定数据时快速获取。 3. 绑定数据:在 onBindViewHolder 方法中,你可以根据位置获取对应的数据对象,并将数据绑定到 ViewHolder 中的视图上。比如,你可以设置 TextView 的文本、ImageView 的图片等。 4. 设置布局管理器和适配器:在使用 RecyclerView 的 Activity 或 Fragment 中,你需要设置布局管理器和适配器。 - 布局管理器(LayoutManager):RecyclerView 需要一个布局管理器来决定列表项的排列方式,如线性布局、网格布局等。你可以选择合适的布局管理器,并将其设置给 RecyclerView。 - 适配器(Adapter):将自定义的适配器实例化,并将其设置给 RecyclerView。 下面是一个简单的示例代码,展示如何使用自定义适配器: ```java public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { private List<String> data; public CustomAdapter(List<String> data) { this.data = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = data.get(position); holder.textView.setText(item); } @Override public int getItemCount() { return data.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.item_text); } } } ``` 在使用 RecyclerView 的 Activity 或 Fragment 中,你可以这样设置布局管理器和适配器: ```java RecyclerView recyclerView = findViewById(R.id.recycler_view); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); CustomAdapter adapter = new CustomAdapter(data); recyclerView.setAdapter(adapter); ``` 以上是使用自定义适配器的基本步骤,你可以根据自己的需求进行相应的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值