2017-05-27 106 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在顯示在適配器中之前明顯排序。就像之前你創建適配器 –