我想将我的android RecyclerView
项目与基于日期的标头分组,如下所示:
1 week ago
- item
- item
- item
- item
2 weeks ago
- item
- item
- item
基于某种元素的事物或分组。
这是我在网上进行大量研究后得到的一个解决方案,该博客链接以及Kartikey
Kuswhaha也是
如此,所以这并不是我的全部功劳,但我只是想更加清楚一点。下面是代码:创建以下文件:
PojoOfJsonArray , MainActivity , ListItem , GeneralItem ,
DateItem , Adapter
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;
}
}
这有两个布局正在使用。因此所有
问题内容: 假设我有以下代码: 我可以手动调用下一个函数多次,以使2个数组按“相同名称”分组。 问题是我不知道变量值,在这种情况下为“ dinner”和“ lunch”,因此我想按名称自动对这个statEvents数组进行分组,所以当名称不同时,我会得到尽可能多的数组。 我该怎么办? 问题答案: 从Swift 4开始,此功能已添加到标准库中。您可以这样使用它: 斯威夫特3: 不幸的是,上面的函数复
我正在做一个我命名为“主项目”的项目。我至少有10个不同的小项目在那里,这个项目可能会增长。我对所有这些项目只有一个自信,因为所有这些项目都只使用一个dotnet核心web应用程序来进行推广。 例如,假设我有一个名为的项目和一个名为的项目。有三个不同的endpoint,分别名为、、、和。这两个不同的项目将出现在一个大摇大摆的UI中,如下所示: 我想做的是在一个dotnet核心web项目中设置多个不
我正试图在另外两个文本视图的左边设置一个文本视图。我想我可以使用某种容器将它们分组,然后将第一个textview设置到包含其他两个textview的容器的左侧。但我找不到任何有效的方法。 我尝试使用relativelayout将它们组合在一起,但它似乎只填充了整个屏幕宽度,并使第一个文本视图位于屏幕的左侧。 如果我将包含其他两个文本视图的relativelayout设置为第一个文本视图的右侧,它会
我有一个单词流,我想根据相同元素的出现对它们进行排序。 例如:{hello,world,hello} 至 你好,{你好,你好} 谢谢你
将给出今天的日期 1月、4月、7月、10月=1 2月、5月、8月、11月=2 3月、6月、9月、12月=3 应该打印。例如:12月是季度的第三个月,所以答案是3。对此有更好的解决方案吗?