栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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;    }}

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452620.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号