首先为传入的数据创建一个实体对象。
public class MultiItemEntity {
public List<MultiItem1> multiItem1s;
public List<MultiItem2> multiItem2s;
public MultiItemEntity(){
multiItem1s = new ArrayList<>();
multiItem2s = new ArrayList<>();
}
public static class MultiItem1 {
public String username;
public String password;
public MultiItem1(String username, String password){
this.username = username;
this.password = password;
}
}
public static class MultiItem2 {
public String tel;
public String email;
public String note;
public MultiItem2(String tel, String email, String note){
this.tel = tel;
this.email = email;
this.note = note;
}
}
}
之后配置适配器(这里我用了一个进度条做结尾,如果不结尾会出现空指针问题):
public class MultiRecyclerViewAdapter extends RecyclerView.Adapter {
private final int ONE = 1;
private final int TWO = 2;
private final int THREE = 3;
private Context context;
private MultiItemEntity datas;
private LayoutInflater layoutInflater;
private MultiRecyclerViewListener multiRecyclerViewListener;
public MultiRecyclerViewAdapter(Context mConText, MultiItemEntity mdatas){
this.context = mConText;
this.datas = mdatas;
layoutInflater = LayoutInflater.from(mConText);
}
class ViewHolder1 extends RecyclerViewAdapter.ViewHolder{
TextView username;
TextView password;
public ViewHolder1(View itemView) {
super(itemView);
username = itemView.findViewById(R.id.username_item);
password = itemView.findViewById(R.id.password_item);
}
}
class ViewHolder2 extends RecyclerViewAdapter.ViewHolder{
TextView tel;
TextView email;
TextView note;
public ViewHolder2(View itemView) {
super(itemView);
tel = itemView.findViewById(R.id.tel_item);
email = itemView.findViewById(R.id.email_item);
note = itemView.findViewById(R.id.note_item);
}
}
class ViewHolder3 extends RecyclerView.ViewHolder{
ProgressBar progressBar;
TextView progress_text;
public ViewHolder3(View itemView) {
super(itemView);
progressBar = itemView.findViewById(R.id.progress_bar);
progress_text = itemView.findViewById(R.id.progress_text);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = new View(parent.getContext());
if(viewType == ONE){
view = layoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item_list, parent, false);
return new ViewHolder1(view);
}else if(viewType == TWO){
view = layoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item_list_2, parent, false);
return new ViewHolder2(view);
}else{
view = layoutInflater.from(parent.getContext()).inflate(R.layout.progressbar_layout, parent, false);
Log.v("aaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaa");
return new ViewHolder3(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof ViewHolder1){
((ViewHolder1) holder).username.setText(datas.multiItem1s.get(position).username);
((ViewHolder1) holder).password.setText(datas.multiItem1s.get(position).password);
}else if(holder instanceof ViewHolder2){
int position2 = position - datas.multiItem1s.size();
((ViewHolder2) holder).tel.setText(datas.multiItem2s.get(position2).tel);
((ViewHolder2) holder).email.setText(datas.multiItem2s.get(position2).email);
((ViewHolder2) holder).note.setText(datas.multiItem2s.get(position2).note);
}else if(holder instanceof ViewHolder3){
((ViewHolder3) holder).progressBar.setIndeterminate(true);
}
}
@Override
public int getItemViewType(int position) {
if(datas == null){
return super.getItemViewType(position);
}
int count1;
if(datas.multiItem1s == null){
count1 = 0;
}else{
count1 = datas.multiItem1s.size();
}
int count2;
if(datas.multiItem2s == null){
count2 = 0;
}else{
count2 = datas.multiItem2s.size();
}
if(position < count1){
return ONE;
}else if(position < count1 + count2){
return TWO;
}else{
return THREE;
}
}
@Override
public int getItemCount() {
if(datas == null){
return 0;
}
int count1;
if(datas.multiItem1s == null){
count1 = 0;
}else {
count1 = datas.multiItem1s.size();
}
int count2;
if(datas.multiItem2s == null){
count2 = 0;
}else {
count2 = datas.multiItem1s.size();
}
return count1 + count2;
}
public interface MultiRecyclerViewListener{
void MultiRecyclerViewOnClick(int position, int type);
}
public void setMultiRecyclerViewListener(MultiRecyclerViewListener multiRecyclerViewListener1){
this.multiRecyclerViewListener = multiRecyclerViewListener1;
}
}
在Activity中,我们需要设置数据,然后将其导入Adapter:
public class ThirdFragment extends Fragment {
public View view;
public RecyclerView recyclerView;
public MultiItemEntity datas;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//避免同一activity下 多个fragment 切换时重复执行onCreateView方法
// Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态。
if (view == null) {
view = inflater.inflate(R.layout.third_fragment, container, false);
} else {
ViewGroup parent = (ViewGroup) view.getParent();
if (null != parent) {
parent.removeView(view);
}
}
initDatas();
recyclerView = view.findViewById(R.id.recyclerView_fragment3);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(view.getContext());
recyclerView.setLayoutManager(linearLayoutManager);
MultiRecyclerViewAdapter multiRecyclerViewAdapter = new MultiRecyclerViewAdapter(view.getContext(),datas);
recyclerView.setAdapter(multiRecyclerViewAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(view.getContext(),
DividerItemDecoration.VERTICAL_LIST));
return view;
}
private void initDatas() {
datas = new MultiItemEntity();
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("happy","123456"));
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("sad","464854"));
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("anger","3415123"));
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("excite","432414"));
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("diss","645356"));
datas.multiItem1s.add(new MultiItemEntity.MultiItem1("exhausted","549815"));
datas.multiItem2s.add(new MultiItemEntity.MultiItem2("123","adf@g.com","null"));
datas.multiItem2s.add(new MultiItemEntity.MultiItem2("435","asdfsff@g.com","aaaa"));
datas.multiItem2s.add(new MultiItemEntity.MultiItem2("156489","adbrbbf@g.com","sdes"));
datas.multiItem2s.add(new MultiItemEntity.MultiItem2("8997","agbrbf@g.com","99"));
datas.multiItem2s.add(new MultiItemEntity.MultiItem2("234","15185@g.com","158"));
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}