我具有正常的recyclerview,并且已经成功按日期对它进行了排序。但是现在我将recyclerview分组了,我想对其进行排序。我试图像普通的recyclerview一样进行排序,但是它不起作用。
在这种情况下,我有java类来标记日期和其中的数据。 ListItem,DaftarPengumuman,PengumumanItem和GeneralItem。
哈希图
private HashMap<String, List<DaftarPengumuman>> groupDataIntoHashMap(List<DaftarPengumuman> listOfDaftarPengumuman) {
HashMap<String, List<DaftarPengumuman>> groupedHashMap = new HashMap<>();
for (DaftarPengumuman daftarPengumuman : listOfDaftarPengumuman) {
String hashMapKey = daftarPengumuman.getTanggal_peng();
if (groupedHashMap.containsKey(hashMapKey)) {
// The key is already in the HashMap; add the pojo object
// against the existing key.
groupedHashMap.get(hashMapKey).add(daftarPengumuman);
} else {
// The key is not there in the HashMap; create a new key-value pair
List<DaftarPengumuman> list = new ArrayList<>();
list.add(daftarPengumuman);
groupedHashMap.put(hashMapKey, list);
}
}
return groupedHashMap;
}
private void hashMap(){
HashMap<String, List<DaftarPengumuman>> groupedHashMap = groupDataIntoHashMap(listPengumuman);
for (String tanggal_peng : groupedHashMap.keySet()) {
PengumumanItem nameItem = new PengumumanItem();
nameItem.setTanggal_peng(tanggal_peng);
consolidatedList.add(nameItem);
for (DaftarPengumuman daftarPengumuman : groupedHashMap.get(tanggal_peng)) {
GeneralItem generalItem = new GeneralItem();
generalItem.setDaftarPengumuman(daftarPengumuman);//setBookingDataTabs(bookingDataTabs);
consolidatedList.add(generalItem);
}
}
adapter.notifyDataSetChanged();
}
pengumumanitem
public class PengumumanItem extends ListItem {
private String tanggal_peng;
public String getTanggal_peng() {
return tanggal_peng;
}
public void setTanggal_peng(String tanggal_peng) {
this.tanggal_peng = tanggal_peng;
}
@Override
public int getType() {
return TYPE_NAME;
}
}
列表项
public abstract class ListItem {
public static final int TYPE_NAME = 0;
public static final int TYPE_TASK = 1;
abstract public int getType();
}
常规项目
public class GeneralItem extends ListItem {
private DaftarPengumuman daftarPengumuman;
public DaftarPengumuman getDaftarPengumuman() {
return daftarPengumuman;
}
public void setDaftarPengumuman(DaftarPengumuman daftarPengumuman) {
this.daftarPengumuman = daftarPengumuman;
}
public int getType(){
return TYPE_TASK;
}
}
daftarpengumuman.class
public class DaftarPengumuman {
private String nama_p,deskripsi,judul,tanggal_peng;
private Long date_milisecond;
public DaftarPengumuman(String nama_p, String deskripsi, String judul, String tanggal_peng) {
this.nama_p = nama_p;
this.deskripsi = deskripsi;
this.judul = judul;
this.tanggal_peng = tanggal_peng;
}
public Long getDate_milisecond() {
return date_milisecond;
}
public void setDate_milisecond(Long date_milisecond) {
this.date_milisecond = date_milisecond;
}
public String getDeskripsi() {
return deskripsi;
}
public void setDeskripsi(String deskripsi) {
this.deskripsi = deskripsi;
}
public String getJudul() {
return judul;
}
public void setJudul(String judul) {
this.judul = judul;
}
public String getTanggal_peng() {
return tanggal_peng;
}
public void setTanggal_peng(String tanggal_peng) {
this.tanggal_peng = tanggal_peng;
}
public DaftarPengumuman() {
}
public String getNama_p() {
return nama_p;
}
public void setNama_p(String nama_p) {
this.nama_p = nama_p;
}
}
myadapter
package com.example.yehezkiel.eclassapp;
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.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Yehezkiel on 7/26/2018.
*/
public class myAdapterPengumuman extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
List<ListItem> consolidatedList = new ArrayList<>();
public myAdapterPengumuman(Context context, List<ListItem> consolidatedList) {
this.consolidatedList = consolidatedList;
this.mContext = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case ListItem.TYPE_TASK:
View v1 = inflater.inflate(R.layout.costume_row_pengumuman, parent,
false);
viewHolder = new GeneralViewHolder(v1);
break;
case ListItem.TYPE_NAME:
View v2 = inflater.inflate(R.layout.costum_row_pengumuman_name, parent, false);
viewHolder = new DateViewHolder(v2);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case ListItem.TYPE_TASK:
GeneralItem generalItem = (GeneralItem) consolidatedList.get(position);
GeneralViewHolder generalViewHolder= (GeneralViewHolder) viewHolder;
generalViewHolder.txtJudul.setText(generalItem.getDaftarPengumuman().getJudul());
generalViewHolder.txtDeskripsi.setText(generalItem.getDaftarPengumuman().getDeskripsi());
generalViewHolder.txtTanggal.setText(generalItem.getDaftarPengumuman().getTanggal_peng());
break;
case ListItem.TYPE_NAME:
PengumumanItem dateItem = (PengumumanItem) consolidatedList.get(position);
DateViewHolder dateViewHolder = (DateViewHolder) viewHolder;
dateViewHolder.txtName.setText(dateItem.getTanggal_peng());
// Populate date item data here
break;
}
}
// ViewHolder for date row item
class DateViewHolder extends RecyclerView.ViewHolder {
protected TextView txtName;
public DateViewHolder(View v) {
super(v);
this.txtName = (TextView) v.findViewById(R.id.name_p);
}
}
// View holder for general row item
class GeneralViewHolder extends RecyclerView.ViewHolder {
protected TextView txtJudul,txtDeskripsi,txtTanggal;
public GeneralViewHolder(View v) {
super(v);
this.txtJudul = (TextView) v.findViewById(R.id.judul_p);
this.txtDeskripsi = (TextView) v.findViewById(R.id.deskripsi_p);
this.txtTanggal = (TextView) v.findViewById(R.id.tanggal_p);
}
}
@Override
public int getItemViewType(int position) {
return consolidatedList.get(position).getType();
}
@Override
public int getItemCount() {
return consolidatedList != null ? consolidatedList.size() : 0;
}
}