2017-05-27 302 views
0

我有一个显示新闻的回收站。新闻由name_news,image_news,time_news组成。Recyclerview按时间升序排序

我从mysqldatabse获取数据。

这是我的适配器类:

public class PostAdapter2 extends RecyclerView.Adapter<PostAdapter2.ViewHolder>{ 

    public Context c; 
    public FragmentManager mContext; 
    public ArrayList<News_data> original_items = new ArrayList<>(); 
    public ArrayList<News_data> filtered_items = new ArrayList<>(); 

    public ArrayList<Simplenews_data> original_items2 = new ArrayList<>(); 
    public ArrayList<Simplenews_data> filtered_items2 = new ArrayList<>(); 
    // ItemFilter mFilters = new ItemFilter(); 

    public PostAdapter2(Context c, ArrayList<News_data> postList) { 
     this.c = c; 
     this.original_items = postList; 
     this.filtered_items = postList; 

    } 

    public PostAdapter2(FragmentManager mContext, ArrayList<Simplenews_data> postList) { 
     this.mContext = mContext; 
     this.original_items2 = postList; 
     this.filtered_items2 = postList; 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_news, parent, false); 


     return new ViewHolder(view); 

    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 

     try { 

      final Simplenews_data post = filtered_items2.get(position); 

      PicassoClient.downloadImage(c, post.getImage_simplenews(), holder.image_news); 
      holder.txt_news_title.setText(post.getName_simplenews()); 
      holder.txt_date.setText(post.getTime_simplenews()); 

      holder.setItemClickListener(new ItemClickListener() { 
       @Override 
       public void onItemClick() { 
        Bundle x = new Bundle(); 
        x.putString("news_title", post.getName_simplenews()); 
        x.putString("news", post.getDesc_simplenews()); 
        x.putString("image",post.getImage_simplenews()); 
        x.putString("time",post.getTime_simplenews()); 
        x.putString("date",post.getDate_simplenews()); 

        Fragment descriptionFragment = new DescriptionFragment(); 
        FragmentTransaction transaction = mContext.beginTransaction(); 
        descriptionFragment.setArguments(x); 
        transaction.replace(R.id.framelayout, descriptionFragment).addToBackStack(null).commit(); 
       } 
      }); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 



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





    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     ItemClickListener itemClickListener; 
     TextView txt_news_title,txt_date; 
     ImageView image_news; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      txt_news_title = (TextView) itemView.findViewById(R.id.txt_news_title); 
      txt_date = (TextView) itemView.findViewById(R.id.txt_timedate); 
      image_news = (ImageView) itemView.findViewById(R.id.image_news); 
      itemView.setOnClickListener(this); 

     } 


     @Override 
     public void onClick(View v) { 
      try { 
       this.itemClickListener.onItemClick(); 

      }catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 


     } 
     public void setItemClickListener(ItemClickListener itemClickListener) 
     { 
      this.itemClickListener=itemClickListener; 
     } 
    } 

} 

我使用PHP接口添加新闻。

的getTime_simplenews()包含的新闻sumbmitted时间格式:14:00

所以我想不是根据此前的消息显示在顶部recyclerview的即时消息。

非常感谢。

更新:

public class Simplenews_data { 

    int id_simplenews; 
    String name_simplenews,image_simplenews,desc_simplenews,time_simplenews,date_simplenews; 

    public String getDate_simplenews() { 
     return date_simplenews; 
    } 

    public void setDate_simplenews(String date_simplenews) { 
     this.date_simplenews = date_simplenews; 
    } 

    public String getTime_simplenews() { 
     return time_simplenews; 
    } 

    public void setTime_simplenews(String time_simplenews) { 
     this.time_simplenews = time_simplenews; 
    } 

    public int getId_simplenews() { 
     return id_simplenews; 
    } 

    public void setId_simplenews(int id_simplenews) { 
     this.id_simplenews = id_simplenews; 
    } 

    public String getName_simplenews() { 
     return name_simplenews; 
    } 

    public void setName_simplenews(String name_simplenews) { 
     this.name_simplenews = name_simplenews; 
    } 

    public String getImage_simplenews() { 
     return image_simplenews; 
    } 

    public void setImage_simplenews(String image_simplenews) { 
     this.image_simplenews = image_simplenews; 
    } 

    public String getDesc_simplenews() { 
     return desc_simplenews; 
    } 

    public void setDesc_simplenews(String desc_simplenews) { 
     this.desc_simplenews = desc_simplenews; 
    } 

片段代码:

public void parseJson2(String response) { 

     try { 

      JSONArray array = new JSONArray(response); 
      JSONObject jsonObject = null; 
      post_array2.clear(); 
      Simplenews_data p; 
      for (int i = 0; i < array.length(); i++) { 
       jsonObject = array.getJSONObject(i); 

       int id_simplenews = jsonObject.getInt("id_simplenews"); 
       String name_simplenews = jsonObject.getString("name_simplenews"); 
       String image_simplenews = jsonObject.getString("image_simplenews"); 
       String desc_simplenews = jsonObject.getString("desc_simplenews"); 
       String time_simplenews = jsonObject.getString("time_simplenews"); 
       String date_simplenews = jsonObject.getString("date_simplenews"); 



       p = new Simplenews_data(); 
       p.setId_simplenews(id_simplenews); 
       p.setName_simplenews(name_simplenews); 
       p.setImage_simplenews(image_simplenews); 
       p.setDesc_simplenews(desc_simplenews); 
       p.setTime_simplenews(time_simplenews); 
       p.setDate_simplenews(date_simplenews); 

       post_array2.add(p); 

      } 

     } catch (JSONException e) { 
      swipeRefreshLayout.setRefreshing(false); 
      e.printStackTrace(); 
     } 
     adapter = new PostAdapter2(getFragmentManager(), post_array2); 
     recycler_post.setAdapter(adapter); 
     swipeRefreshLayout.setRefreshing(false); 


    } 
+0

您可以对您存储数据的列表进行排序,并且recyclerview会根据列表中的排序自动显示数据。为了参考,你可以检查下面的URL,使你对象比较容易排序你的列表 https://stackoverflow.com/a/5927408/3136282 – Arshad

+0

排序列表之前,先发送到适配器.. – ZeroOne

+0

@ZeroOne请你可以尝试你的解决方案我的代码 –

回答

1

我已经更新了你的模型类,并实现与其所

public class Simplenews_data implements Comparable<Simplenews_data> { 

    int id_simplenews; 
    String name_simplenews,image_simplenews,desc_simplenews,time_simplenews,date_simplenews; 

    public String getDate_simplenews() { 
     return date_simplenews; 
    } 

    public void setDate_simplenews(String date_simplenews) { 
     this.date_simplenews = date_simplenews; 
    } 

    public String getTime_simplenews() { 
     return time_simplenews; 
    } 

    public void setTime_simplenews(String time_simplenews) { 
     this.time_simplenews = time_simplenews; 
    } 

    public int getId_simplenews() { 
     return id_simplenews; 
    } 

    public void setId_simplenews(int id_simplenews) { 
     this.id_simplenews = id_simplenews; 
    } 

    public String getName_simplenews() { 
     return name_simplenews; 
    } 

    public void setName_simplenews(String name_simplenews) { 
     this.name_simplenews = name_simplenews; 
    } 

    public String getImage_simplenews() { 
     return image_simplenews; 
    } 

    public void setImage_simplenews(String image_simplenews) { 
     this.image_simplenews = image_simplenews; 
    } 

    public String getDesc_simplenews() { 
     return desc_simplenews; 
    } 

    public void setDesc_simplenews(String desc_simplenews) { 
     this.desc_simplenews = desc_simplenews; 
    } 

    @Override 
    public int compareTo(MyObject o) { 
     Date newDate = formatDateTime(o.getTime_simplenews(), "HH:mm", "YYYY-MM-DD HH:mm"); 
     Date inputDate = formatDateTime(getTime_simplenews(), "HH:mm", "YYYY-MM-DD HH:mm"); 
     return inputDate.compareTo(newDate); 
    } 

    public Date formatDateTime(String date, String fromFormat, String toFormat) { 
     Date d = null; 
     try { 
      d = new SimpleDateFormat(fromFormat, Locale.US).parse(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return new SimpleDateFormat(toFormat, Locale.US).parse(d); 
    } 
} 

排序使用下面的代码清单

Collections.sort(yourList); 
+0

非常感谢@Arshad,但我应该在哪里使用Collections.sort? 我正在更新我发布的问题我如何获取数据.. 请重新检查更新后的问题 –

+0

使用Collections.sort在初始化您的recyclerView适配器之前,使用此行上方的列表“adapter = new PostAdapter2(getFragmentManager( ),post_array2);“ – Arshad

+0

@Mahdi在显示在适配器中之前明显排序。就像之前你创建适配器 –