主函数中
package project.tao.com.design; 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 android.text.TextUtils; import java.io.IOException; import java.util.List; import project.tao.com.design.utils.OkHttpClientUtils; import project.tao.com.design.utils.ParserJson; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<NewsInfo> list; private String url="http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20" + "&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41"; private RecyclerViewAdapter recyclerViewAdapter; public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { list= (List<NewsInfo>) msg.obj; recyclerViewAdapter=new RecyclerViewAdapter(MainActivity.this,list); recyclerView.setAdapter(recyclerViewAdapter); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView=(RecyclerView)findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); new Thread(new Runnable() { @Override public void run() { try { String jsonString= OkHttpClientUtils.getStringFromURL(MainActivity.this,url,""); if(!TextUtils.isEmpty(jsonString)){ list= ParserJson.parserJsonToList(jsonString); Message message=Message.obtain(); message.obj=list; handler.sendMessage(message); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
/** * 设置线性排列时item之间的分割线,decoration装饰 * This class is from the v7 samples of the Android SDK. * See the license above for details. */ public class DividerItemDecoration extends RecyclerView.ItemDecoration{ private static final int[] ATTRS=new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST= LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } public void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); RecyclerView v = new RecyclerView(parent.getContext()); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } }
RecycleViewAdapter适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private Context context; private List<NewsInfo> list; public RecyclerViewAdapter(Context context, List<NewsInfo> list) { this.context = context; this.list = list; } /** * 创建自定义viewholder对象 * @param parent * @param viewType * @return */ @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.item,null); MyViewHolder holder=new MyViewHolder(view); return holder; } /** * 将数据加载到控件中 * @param holder onCreateViewHolder返回的自定义viewholder对象 * @param position 表示当前绑定数据的下标 */ @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.iv.setImageResource(R.mipmap.ic_launcher); Picasso.with(context).load(list.get(position).getCover()).into(holder.iv); holder.tv_subject.setText(list.get(position).getSubject()); holder.tv_summary.setText(list.get(position).getSummary()); holder.tv_changed.setText(list.get(position).getChanged()); } /** * 返回当前适配器中加载的数据的条目 BaseAdapter getCount() * @return */ @Override public int getItemCount() { return list.size(); } /** * 在适配器的内部创建自定义的MyViewHolder类 必须继承RecyclerView.ViewHolder * 该类构造时必须传入view对象 该view对象相当于ListView中getView()中的convertView * * ListView中convertView是复用的 在RecyclerView中把convertView作为ViewHolder * 的成员变量存储 */ class MyViewHolder extends RecyclerView.ViewHolder{ ImageView iv; TextView tv_subject,tv_summary,tv_changed; //必须实现的构造函数 public MyViewHolder(View itemView) { super(itemView); iv= (ImageView) itemView.findViewById(R.id.iv); tv_subject= (TextView) itemView.findViewById(R.id.tv_subject); tv_summary= (TextView) itemView.findViewById(R.id.tv_summary); tv_changed= (TextView) itemView.findViewById(R.id.tv_changed); } } }