Reputation: 3730
i'm trying to make recyclerview with four viewtypes , each viewtype will represent certain data , my app is for premier league ( football ) , so i have viewtype for goals , yellow card,and red card , each string comes with the time of scoring the goal , or getting the yellow card and red card , i'm trying to apply some logic but it is not working for me
First : this is what i'm trying to achieve Image that shows how goals , and cards are ordered by the time they happened
second this is the code i tried to achieve that :
//Splitting Strings
String[] homeg = hometiming.split(";");
String[] homeyello = homeyellow.split(";");
String[] homere = homered.split(";");
for (String h : homeg) {
if (!h.equals("")) {
int subgoals = Integer.parseInt(h.substring(0, 1));
for (String y : homeyello) {
if (!y.equals("")) {
int subYellow = Integer.parseInt(y.substring(0, 1));
for (String n : homere) {
if (!n.equals("")) {
int subRed = Integer.parseInt(n.substring(0, 1));
/// if goals time is smaller than time of yellow and rec card , show
/// goals
if (subgoals < subYellow && subgoals < subRed) {
GoalsItem goalsItem = new GoalsItem();
goalsItem.setHomegoals("goals :" + h + "\n");
consolidatedlist.add(goalsItem);
}
/// if yellow cards time is smaller than time of goals and red cards ,
/// show yellow cards
else if (subYellow < subgoals && subYellow < subRed) {
YellowItems yellowItems = new YellowItems();
yellowItems.setHomeyellow("yellow :" + y + "\n");
consolidatedlist.add(yellowItems);
}
/// if red card time is smaller than time of goals and yellow cards ,
/// show red cards
else if (subRed < subgoals && subRed < subYellow) {
RedItems redItems = new RedItems();
redItems.setHomered("red : " + n + "\n");
consolidatedlist.add(redItems);
} } } } } } }
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case TypeItem.TYPE_PHOTO:
PhotoItem photoItem = (PhotoItem) list.get(position);
ViewPhoto viewphoto = (ViewPhoto) holder;
viewphoto.date.setText("" + photoItem.getDate());
Picasso.with(context).load(photoItem.getPhoto()).fit().into(((ViewPhoto) holder).photo);
break;
case TypeItem.TYPE_Goals:
GoalsItem goalsItem = (GoalsItem) list.get(position);
ViewGoals viewgoals = (ViewGoals) holder;
viewgoals.homegoals.setText("" + goalsItem.getHomegoals());
viewgoals.awaygoals.setText("" + goalsItem.getAwaygoals());
break;
case TypeItem.TYPE_Yellow:
YellowItems yellowItems = (YellowItems) list.get(position);
ViewYellow viewyellow = (ViewYellow) holder;
viewyellow.homeyellow.setText("" + yellowItems.getHomeyellow());
viewyellow.awayyellow.setText("" + yellowItems.getAwayyellow());
break;
case TypeItem.TYPE_RED:
RedItems redItems = (RedItems) list.get(position);
ViewRed viewred = (ViewRed) holder;
viewred.homered.setText("" + redItems.getHomered());
viewred.awayred.setText("" +redItems.getAwayred());
break;
}
}
"strHomeGoalDetails":"",
"strHomeRedCards":"",
"strHomeYellowCards":"13':Luka Milivojevic;",
"strAwayRedCards":"",
"strAwayYellowCards":"47':Raheem Sterling;",
"strAwayGoalDetails":"39':Gabriel Jesus;41':David Silva;",
Upvotes: 0
Views: 103
Reputation: 239
You have to override getItemViewType(position: Int)
, than by viewType
in onCreatecreate
return different ViewHolders
(if you need), and than in onBindViewHolder
do you bindings by your types
For example in your adapter class create map with typeField: String
, and key: Int
private val keyMap = HashMap<String, Int>().apply {
put("FIRST_TYPE", 1)
put("SECOND_TYPE", 2)
put("THIRD_TYPE", 3)
}
the second step is to override getItemViewType(position: Int)
override fun getItemViewType(position: Int): Int {
return keyMap.get(yourItemList(position).getType())
Third step - override onCreateViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ResourceViewHolder {
return when (viewType) {
keyMap.get("FIRST_TYPE") -> //create specific ViewHolder
keyMap.get("SECOND_TYPE") -> //create specific ViewHolder
//etc
}
The last part is to bind onBindViewHolder
You can do this the same way as onCreateViewHolder
Upvotes: 1