在RecyclerView或Grouping Recyclerview项目中的组上划分元素,例如按日期

在RecyclerView或Grouping Recyclerview项目中的组上划分元素,例如按日期,第1张

在RecyclerView或Grouping Recyclerview项目中的组上划分元素,例如按日期

这是我在网上进行大量研究后得到的一个解决方案,该博客链接以及Kartikey
Kuswhaha也是
如此,所以这并不是我的全部功劳,但我只是想更加清楚一点。下面是代码:创建以下文件
PojoOfJsonArrayMainActivityListItemGeneralItem
DateItemAdapter

PojoOfJsonArray .java-该 文件将表示您的POJO类或您在应用程序中进行的任何pojo,因此:

 public class PojoOfJsonArray  {    public PojoOfJsonArray(String name, String date) {        this.name = name;        this.date = date;    }    private String name,date;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getDate() {        return date;    }    public void setDate(String date) {        this.date = date;    }}

MainActivity .java这是您将用来实现recyclerview的活动:

public class MainActivity extends AppCompatActivity {    private List<PojoOfJsonArray> myOptions = new ArrayList<>();    List<ListItem> consolidatedList = new ArrayList<>();    private RecyclerView mRecyclerView;    private Adapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);        mRecyclerView.setHasFixedSize(true);        myOptions.add(new PojoOfJsonArray("name 1", "2016-06-21"));        myOptions.add(new PojoOfJsonArray("name 2", "2016-06-05"));        myOptions.add(new PojoOfJsonArray("name 2", "2016-06-05"));        myOptions.add(new PojoOfJsonArray("name 3", "2016-05-17"));        myOptions.add(new PojoOfJsonArray("name 3", "2016-05-17"));        myOptions.add(new PojoOfJsonArray("name 3", "2016-05-17"));        myOptions.add(new PojoOfJsonArray("name 3", "2016-05-17"));        myOptions.add(new PojoOfJsonArray("name 2", "2016-06-05"));        myOptions.add(new PojoOfJsonArray("name 3", "2016-05-17"));        HashMap<String, List<PojoOfJsonArray>> groupedHashMap = groupDataIntoHashMap(myOptions);        for (String date : groupedHashMap.keySet()) { DateItem dateItem = new DateItem(); dateItem.setDate(date); consolidatedList.add(dateItem); for (PojoOfJsonArray pojoOfJsonArray : groupedHashMap.get(date)) {     GeneralItem generalItem = new GeneralItem();     generalItem.setPojoOfJsonArray(pojoOfJsonArray);//setBookingDataTabs(bookingDataTabs);     consolidatedList.add(generalItem); }        }        adapter = new Adapter(this, consolidatedList);        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(layoutManager);        mRecyclerView.setAdapter(adapter);    }    private HashMap<String, List<PojoOfJsonArray>> groupDataIntoHashMap(List<PojoOfJsonArray> listOfPojosOfJsonArray) {        HashMap<String, List<PojoOfJsonArray>> groupedHashMap = new HashMap<>();        for (PojoOfJsonArray pojoOfJsonArray : listOfPojosOfJsonArray) { String hashMapKey = pojoOfJsonArray.getDate(); if (groupedHashMap.containsKey(hashMapKey)) {     // The key is already in the HashMap; add the pojo object     // against the existing key.     groupedHashMap.get(hashMapKey).add(pojoOfJsonArray); } else {     // The key is not there in the HashMap; create a new key-value pair     List<PojoOfJsonArray> list = new ArrayList<>();     list.add(pojoOfJsonArray);     groupedHashMap.put(hashMapKey, list); }        }        return groupedHashMap;    }}

myOptions是用于将数据馈入其中的位置。 ListItem .java

public abstract class ListItem {    public static final int TYPE_DATE = 0;    public static final int TYPE_GENERAL = 1;    abstract public int getType();}

GeneralItem .java

public class GeneralItem extends ListItem {    private PojoOfJsonArray pojoOfJsonArray;    public PojoOfJsonArray getPojoOfJsonArray() {        return pojoOfJsonArray;    }    public void setPojoOfJsonArray(PojoOfJsonArray pojoOfJsonArray) {        this.pojoOfJsonArray = pojoOfJsonArray;    }    @Override    public int getType() {        return TYPE_GENERAL;    }}

DateItem .java

public class DateItem extends ListItem {    private String date;    public String getDate() {        return date;    }    public void setDate(String date) {        this.date = date;    }    @Override    public int getType() {        return TYPE_DATE;    }}

适配器
.java,如果您对如何制作简单的分段recyclerview不太了解,那么此适配器适用于recyclerview,那么我建议您仔细阅读这些内容并精通该领域,因为无论如何这还是比较棘手的:

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private Context mContext;    List<ListItem> consolidatedList = new ArrayList<>();    public Adapter(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_GENERAL:     View v1 = inflater.inflate(R.layout.items, parent,  false);     viewHolder = new GeneralViewHolder(v1);     break; case ListItem.TYPE_DATE:     View v2 = inflater.inflate(R.layout.itemsh, parent, false);     viewHolder = new DateViewHolder(v2);     break;        }        return viewHolder;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {        switch (viewHolder.getItemViewType()) { case ListItem.TYPE_GENERAL:     GeneralItem generalItem   = (GeneralItem) consolidatedList.get(position);     GeneralViewHolder generalViewHolder= (GeneralViewHolder) viewHolder;     generalViewHolder.txtTitle.setText(generalItem.getPojoOfJsonArray().getName());     break; case ListItem.TYPE_DATE:     DateItem dateItem = (DateItem) consolidatedList.get(position);     DateViewHolder dateViewHolder = (DateViewHolder) viewHolder;     dateViewHolder.txtTitle.setText(dateItem.getDate());     // Populate date item data here     break;        }    }    // ViewHolder for date row item    class DateViewHolder extends RecyclerView.ViewHolder {        protected TextView txtTitle;        public DateViewHolder(View v) { super(v); this.txtTitle = (TextView) v.findViewById(R.id.txt);        }    }    // View holder for general row item    class GeneralViewHolder extends RecyclerView.ViewHolder {        protected TextView txtTitle;        public GeneralViewHolder(View v) { super(v); this.txtTitle = (TextView) v.findViewById(R.id.txt);        }    }    @Override    public int getItemViewType(int position) {        return consolidatedList.get(position).getType();    }    @Override    public int getItemCount() {        return consolidatedList != null ? consolidatedList.size() : 0;    }}

这有两个布局正在使用。因此所有



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5428146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存