学习Android Material Design(RecyclerView代替ListView)

2019-12-10 19:15:24王旭

 

/**
 * 新闻类,这是在 RecycleView 使用的新闻 javabean
 * 还有一个新闻详情javabean
 */
public class ItemArticle {
 private int index;
 private String imageUrl;
 private String title;
 private String publishDate;
 private String source;
 private int readTimes;
 private String preview;

 public ItemArticle(int index, String imageUrl, String title, String publishDate, String source, int readTimes, String preview) {
  this.index = index;
  this.imageUrl = imageUrl;
  this.title = title;
  this.publishDate = publishDate;
  this.source = source;
  this.readTimes = readTimes;
  this.preview = preview;
 }

 public int getIndex() {
  return index;
 }

 public void setIndex(int index) {
  this.index = index;
 }

 public String getImageUrl() {
  return imageUrl;
 }

 public void setImageUrl(String imageUrl) {
  this.imageUrl = imageUrl;
 }

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public String getPublishDate() {
  return publishDate;
 }

 public void setPublishDate(String publishDate) {
  this.publishDate = publishDate;
 }

 public String getSource() {
  return source;
 }

 public void setSource(String source) {
  this.source = source;
 }

 public int getReadTimes() {
  return readTimes;
 }

 public void setReadTimes(int readTimes) {
  this.readTimes = readTimes;
 }

 public String getPreview() {
  return preview;
 }

 public void setPreview(String preview) {
  this.preview = preview;
 }
}

4、fragment 里面使用 RecyclerView

思路就是开启一个异步线程,读取多条新闻,加入List itemArticleList,由这个itemArticleList构造ItemArticleAdapter,最后利用setAdapter()方法给RecyclerView加上适配器。

 

public class ArticleFragment extends Fragment {
 private static final String STORE_PARAM = "param";
 @InjectView(R.id.rcv_article)
 RecyclerView rcvArticle;

 private String mParam;
 //新闻列表数据
 private List<ItemArticle> itemArticleList = new ArrayList<ItemArticle>();

 //获取 fragment 依赖的 Activity,方便使用 Context
 private Activity mAct;


 public static Fragment newInstance(String param) {
  ArticleFragment fragment = new ArticleFragment();
  Bundle args = new Bundle();
  args.putString(STORE_PARAM, param);
  fragment.setArguments(args);
  return fragment;
 }

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if (getArguments() != null) {
   mParam = getArguments().getString(STORE_PARAM);
  }
 }

 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.fragment_article, null);
  Log.i(STORE_PARAM, "in StoreFragment");
  mAct = getActivity();
  ButterKnife.inject(this, view);
  return view;
 }

 @Override
 public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  rcvArticle.setLayoutManager(new LinearLayoutManager(mAct));//这里用线性显示 类似于listview
//  rcvArticle.setLayoutManager(new GridLayoutManager(mAct, 2));//这里用线性宫格显示 类似于grid view
//  rcvArticle.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流

  new LatestArticleTask().execute();

 }

 @Override
 public void onDestroyView() {
  super.onDestroyView();
  ButterKnife.reset(this);
 }

 class LatestArticleTask extends AsyncTask<String, Void, List<ItemArticle>> {

  @Override
  protected void onPreExecute() {
   super.onPreExecute();
  }

  @Override
  protected List<ItemArticle> doInBackground(String... params) {
   ItemArticle storeInfo1 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   ItemArticle storeInfo2 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   ItemArticle storeInfo3 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   ItemArticle storeInfo4 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   ItemArticle storeInfo5 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   ItemArticle storeInfo6 =
     new ItemArticle(20123, "http://www.easck.com/ent/j/2012-05-20/U5912P28T3D3634984F328DT20120520152700.JPG", "关于举办《经典音乐作品欣赏与人文审美》讲座的通知", "2015-01-09", "科学研究院", 1129,
       "讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识...");
   itemArticleList.add(storeInfo1);
   itemArticleList.add(storeInfo2);
   itemArticleList.add(storeInfo3);
   itemArticleList.add(storeInfo4);
   itemArticleList.add(storeInfo5);
   itemArticleList.add(storeInfo6);
   return itemArticleList;
  }

  @Override
  protected void onPostExecute(List<ItemArticle> data) {
   super.onPostExecute(data);
   ItemArticleAdapter adapter = new ItemArticleAdapter(mAct, data);
   rcvArticle.setAdapter(adapter);
  }
 }

}