解析 RecyclerView多布局

来源:互联网 发布:手机锁帧软件 编辑:程序博客网 时间:2024/06/06 00:07
package com.example.myrecyclerviewduobuju;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.example.myrecyclerviewduobuju.adapter.MyRecycAdapter;import com.example.myrecyclerviewduobuju.bean.User;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.lang.reflect.Type;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.List;public class MainActivity extends AppCompatActivity {    private RecyclerView recyc;    private String pag = "http://172.16.45.8/test/array2.txt";    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 44) {                String obj = (String) msg.obj;                Gson gson = new Gson();                Type type = new TypeToken<List<User>>() {                }.getType();                been = gson.fromJson(obj, type);                LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);                recyc.setLayoutManager(manager);                adapter = new MyRecycAdapter(been, MainActivity.this);                recyc.setAdapter(adapter);                initListener();            }        }    };    private List<User> been;    private MyRecycAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();    }    private void initListener() {           adapter.setOnClickListener(new MyRecycAdapter.OnClickListener() {               @Override               public void onClick(int pos) {                   Intent intent = new Intent(MainActivity.this,UrlActivity.class);                   intent.putExtra("url",been.get(pos).getUrl());                   startActivity(intent);               }           });    }    private void initData() {        new Thread(new Runnable() {            @Override            public void run() {                try {                    URL url = new URL(pag);                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    if (conn.getResponseCode() == 200) {                        InputStream stream = conn.getInputStream();                        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));                        String string = "";                        StringBuffer sb = new StringBuffer();                        while ((string = reader.readLine()) != null) {                            sb.append(string);                        }                        handler.obtainMessage(44, sb.toString()).sendToTarget();                    }                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    private void initView() {        recyc = (RecyclerView) findViewById(R.id.recyc);    }}
package com.example.myrecyclerviewduobuju.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.myrecyclerviewduobuju.R;import com.example.myrecyclerviewduobuju.bean.User;import com.squareup.picasso.Picasso;import java.util.List;/** * Created by 鬼鬼 on 2017/12/18. */public class MyRecycAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private List<User> been;    private Context context;    private RecyclerView.ViewHolder holder = null;    private OnClickListener listener;    public MyRecycAdapter(List<User> been, Context context) {        this.been = been;        this.context = context;    }    @Override    public int getItemViewType(int position) {        return been.get(position).getType();    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        switch (viewType) {            case 0:                View view = LayoutInflater.from(context).inflate(R.layout.item_one, parent, false);                holder = new One(view);                break;            case 1:                View view1 = LayoutInflater.from(context).inflate(R.layout.item_tow, parent, false);                holder = new Tow(view1);                break;        }        return holder;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {        User user = been.get(position);        int type = user.getType();        List<User.PicBean> pic = user.getPic();        switch (type){            case 0:                Picasso.with(context).load(pic.get(0).getThumbnail_pic()).into(((One)holder).pic1);                Picasso.with(context).load(pic.get(1).getThumbnail_pic()).into(((One)holder).pic2);                Picasso.with(context).load(pic.get(2).getThumbnail_pic()).into(((One)holder).pic3);                ((One)holder).name.setText(been.get(position).getTitle());                ((One)holder).title.setText(been.get(position).getCategory());                ((One)holder).data.setText(been.get(position).getAuthor_name());                holder.itemView.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        listener.onClick(position);                    }                });                break;            case 1:                Picasso.with(context).load(pic.get(0).getThumbnail_pic()).into(((Tow)holder).pic);                ((Tow)holder).name.setText(been.get(position).getTitle());                ((Tow)holder).title.setText(been.get(position).getCategory());                ((Tow)holder).data.setText(been.get(position).getAuthor_name());                holder.itemView.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        listener.onClick(position);                    }                });                break;        }    }    @Override    public int getItemCount() {        return been.size();    }    class One extends RecyclerView.ViewHolder {        private final TextView name;        private final ImageView pic1;        private final ImageView pic2;        private final ImageView pic3;        private final TextView title;        private final TextView data;        public One(View itemView) {            super(itemView);            name = itemView.findViewById(R.id.name);            pic1 = itemView.findViewById(R.id.pic1);            pic2 = itemView.findViewById(R.id.pic2);            pic3 = itemView.findViewById(R.id.pic3);            title = itemView.findViewById(R.id.title);            data = itemView.findViewById(R.id.data);        }    }    class Tow extends RecyclerView.ViewHolder {        private final TextView name;        private final ImageView pic;        private final TextView title;        private final TextView data;        public Tow(View itemView) {            super(itemView);            name = itemView.findViewById(R.id.name);            pic = itemView.findViewById(R.id.pic);            title = itemView.findViewById(R.id.title);            data = itemView.findViewById(R.id.data);        }    }    public interface OnClickListener{        void onClick(int pos);    }    public void setOnClickListener(OnClickListener listener){        this.listener=listener;    }}