这是我在网上进行大量研究后得到的一个解决方案,该博客链接以及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; }}
这有两个布局正在使用。因此所有
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)