android - 具有不同布局的可扩展 recyclerview 适配器
问题描述
我正在尝试expandable RecyclerView adapter
为父视图和子视图制作不同的布局。我以前从未做过expanable RecyclerView adapter
,所以我不知道这是否可能。这是我的代码:
public class GroupsAdapter extends ExpandableRecyclerViewAdapter<GroupsAdapter.ParentVehicleViewHolder, GroupsAdapter.ChildItemViewHolder> {
//region final Fields
private final GroupsClickListener mOnItemClickListener;
private final Repository mRepository;
private boolean mIsClicked;
private int mFilterField;
private int mFilterType;
private int viewType;
//endregion
//region Fields
private List<ParentVehicle> mGroups = new ArrayList<>();
//endregion
//region Constructors
public GroupsAdapter(List<ParentVehicle> groups, Repository repository,
GroupsClickListener listener, boolean isClicked, int Layout) {
super(groups);
this.mOnItemClickListener = listener;
this.mRepository = repository;
this.mGroups = groups;
this.mIsClicked = isClicked;
this.viewType = Layout;
}
//endregion
@Override
public int getItemViewType(int position) {
if (position == 0){
viewType = 0;
}else {
viewType=1;
}
return viewType;
}
public int getViewTypeCount() {
return 2;
}
public void setData(List<ParentVehicle> groups, boolean isClicked) {
mGroups.clear();
mGroups.addAll(groups);
mIsClicked = isClicked;
notifyDataSetChanged();
}
public void setGroup(ParentVehicle group) {
mGroups.clear();
mGroups.add(group);
notifyDataSetChanged();
}
public void sortByName() {
if (mFilterField == Constants.FIELD_NAME) {
if (mFilterType == Constants.DECREASING) {
mFilterType = Constants.INCREASING;
Collections.sort(mGroups, new ParentVehicle.NameComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.NameComparator());
}
} else {
mFilterType = Constants.DECREASING;
Collections.sort(mGroups, Collections.reverseOrder(new ParentVehicle.NameComparator()));
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), Collections.reverseOrder(new Vehicle.NameComparator()));
}
}
} else {
mFilterType = Constants.INCREASING;
mFilterField = Constants.FIELD_NAME;
Collections.sort(mGroups, new ParentVehicle.NameComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.NameComparator());
}
}
notifyDataSetChanged();
}
public void sortByNumber() {
if (mFilterField == Constants.FIELD_ID) {
if (mFilterType == Constants.DECREASING) {
mFilterType = Constants.INCREASING;
Collections.sort(mGroups, new ParentVehicle.IdComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.IdComparator());
}
} else {
mFilterType = Constants.DECREASING;
Collections.sort(mGroups, Collections.reverseOrder(new ParentVehicle.IdComparator()));
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), Collections.reverseOrder(new Vehicle.IdComparator()));
}
}
} else {
mFilterType = Constants.INCREASING;
mFilterField = Constants.FIELD_ID;
Collections.sort(mGroups, new ParentVehicle.IdComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.IdComparator());
}
}
notifyDataSetChanged();
}
public void sortByDays() {
if (mFilterField == Constants.FIELD_DAYS) {
if (mFilterType == Constants.DECREASING) {
mFilterType = Constants.INCREASING;
Collections.sort(mGroups, new ParentVehicle.DaysComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.DaysComparator());
}
} else {
mFilterType = Constants.DECREASING;
Collections.sort(mGroups, Collections.reverseOrder(new ParentVehicle.DaysComparator()));
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), Collections.reverseOrder(new Vehicle.DaysComparator()));
}
}
} else {
mFilterType = Constants.INCREASING;
mFilterField = Constants.FIELD_DAYS;
Collections.sort(mGroups, new ParentVehicle.DaysComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.DaysComparator());
}
}
notifyDataSetChanged();
}
public void sortByGeo() {
if (mFilterField == Constants.FIELD_GEO) {
if (mFilterType == Constants.DECREASING) {
mFilterType = Constants.INCREASING;
Collections.sort(mGroups, new ParentVehicle.GeoComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.GeoComparator());
}
} else {
mFilterType = Constants.DECREASING;
Collections.sort(mGroups, Collections.reverseOrder(new ParentVehicle.GeoComparator()));
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), Collections.reverseOrder(new Vehicle.GeoComparator()));
}
}
} else {
mFilterType = Constants.INCREASING;
mFilterField = Constants.FIELD_GEO;
Collections.sort(mGroups, new ParentVehicle.GeoComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.GeoComparator());
}
}
notifyDataSetChanged();
}
public void sortByWarning() {
if (mFilterField == Constants.FIELD_WARNING) {
if (mFilterType == Constants.DECREASING) {
mFilterType = Constants.INCREASING;
Collections.sort(mGroups, new ParentVehicle.WarningComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.WarningComparator());
}
} else {
mFilterType = Constants.DECREASING;
Collections.sort(mGroups, Collections.reverseOrder(new ParentVehicle.WarningComparator()));
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), Collections.reverseOrder(new Vehicle.WarningComparator()));
}
}
} else {
mFilterType = Constants.INCREASING;
mFilterField = Constants.FIELD_WARNING;
Collections.sort(mGroups, new ParentVehicle.WarningComparator());
if (mIsClicked) {
Collections.sort(mGroups.get(0).getVehicles(), new Vehicle.WarningComparator());
}
}
notifyDataSetChanged();
}
void filter(String text) {
List<Group> temp = new ArrayList();
for (Group group : getAllGroups()) {
if (group.getName().toLowerCase().contains(text)) {
temp.add(group);
}
}
if (TextUtils.isEmpty(text)) {
temp = getAllGroups();
}
//update recyclerview
//setData(temp);
}
private List<Group> getAllGroups() {
final List<Group> tempGroupList = new ArrayList<>();
if (!mRepository.getCompanies().isEmpty()) {
for (Company company : mRepository.getCompanies()) {
tempGroupList.addAll(Arrays.asList(company.getGroups()));
}
}
return tempGroupList;
}
//region expandableAdapterMethods
@Override
public ParentVehicleViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
View view;
if (viewType==0){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_table, parent, false);
return new ParentVehicleViewHolder(view,viewType);
} else if (viewType==1) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.delete_row, parent, false);
return new ParentVehicleViewHolder(view,viewType);
} return null;
}
@Override
public ChildItemViewHolder onCreateChildViewHolder(ViewGroup child, int viewType) {
View view;
if (viewType == 0) {
view = LayoutInflater.from(child.getContext()).inflate(R.layout.item_table, child, false);
return new ChildItemViewHolder(view, viewType);
} else if (viewType == 1) {
view = LayoutInflater.from(child.getContext()).inflate(R.layout.delete_row, child, false);
return new ChildItemViewHolder(view, viewType);
}return null;
}
@Override
public void onBindChildViewHolder(ChildItemViewHolder holder, int position, ExpandableGroup group, int childIndex) {
int viewType = getItemViewType(position);
if (viewType==0){
final Vehicle vehicle = ((ParentVehicle) group).getItems().get(childIndex);
holder.bind(vehicle, mOnItemClickListener);
} else if (viewType==1){
final Vehicle vehicle = ((ParentVehicle) group).getItems().get(childIndex);
holder.bind2(vehicle, mOnItemClickListener);
}
}
@Override
public void onBindGroupViewHolder(ParentVehicleViewHolder holder, int position, ExpandableGroup group) {
int viewType = getItemViewType(position);
if (viewType==0){
holder.bind(((ParentVehicle) group), mOnItemClickListener, mIsClicked);
} else if (viewType==1){
holder.bind2(((ParentVehicle) group), mIsClicked);
}
}
//endregion
static class ParentVehicleViewHolder extends GroupViewHolder {
TextView novText;
ImageView strelka;
TextView day7;
TextView day6;
TextView day5;
TextView day4;
TextView day3;
TextView day2;
TextView day1;
TextView mId;
TextView mNumber;
ImageView mBattery;
ImageView mGsimbol;
ImageView mWarning;
ImageView mGroupArrow;
private View mView;
public ParentVehicleViewHolder(View itemView, int viewType) {
super(itemView);
this.mView = itemView;
ButterKnife.bind(this, itemView);
if (viewType == 0) {
day7 = itemView.findViewById(R.id.number_7);
day6 = itemView.findViewById(R.id.number_6);
day5=itemView.findViewById(R.id.number_5);
day4=itemView.findViewById(R.id.number_4);
day3=itemView.findViewById(R.id.number_3);
day2=itemView.findViewById(R.id.number_2);
day1=itemView.findViewById(R.id.number_1);
mId=itemView.findViewById(R.id.item_unit_id);
mNumber=itemView.findViewById(R.id.item_number);
mBattery=itemView.findViewById(R.id.item_battery);
mGsimbol=itemView.findViewById(R.id.item_gsimbol);
mWarning=itemView.findViewById(R.id.icon_warning);
mGroupArrow=itemView.findViewById(R.id.group_arrow);
} else if (viewType==1){
novText=itemView.findViewById(R.id.item_numberEden);
strelka=itemView.findViewById(R.id.group_arrowEden);
}
}
public void bind(ParentVehicle parentVehicle, GroupsClickListener groupsClickListener, boolean showArrow) {
mNumber.setText(parentVehicle.getId());
mId.setText(parentVehicle.getName());
mId.setTextColor(mView.getContext().getResources().getColor(R.color.light_blue));
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (parentVehicle.isCompany()) {
groupsClickListener.onCompanyItemClick(parentVehicle.getId());
} else {
groupsClickListener.onGroupItemClick(parentVehicle.getId());
}
}
});
mGroupArrow.setVisibility(showArrow ? View.VISIBLE : View.GONE);
if (parentVehicle.getVehicles() != null && !parentVehicle.getVehicles().isEmpty()) {
if (isGeo(parentVehicle.getVehicles())) {
mGsimbol.setVisibility(View.INVISIBLE);
} else {
mGsimbol.setVisibility(View.VISIBLE);
}
if (isWarning(parentVehicle.getVehicles())) {
mWarning.setVisibility(View.VISIBLE);
} else {
mWarning.setVisibility(View.INVISIBLE);
}
}
day1.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 0) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day2.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 1) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day3.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 2) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day4.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 3) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day5.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 4) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day6.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 5) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day7.setBackgroundResource(isActiveDay(parentVehicle.getVehicles(), 6) ? R.drawable.green_rectangle : R.drawable.red_rectangle);
}
private boolean isGeo(List<Vehicle> vehicles) {
if (vehicles == null || vehicles.isEmpty()) {
return true;
}
for (Vehicle vehicle : vehicles) {
if (!vehicle.hasGeofenceAlarm()) {
return false;
}
}
return true;
}
private boolean isWarning(List<Vehicle> vehicles) {
if (vehicles == null || vehicles.isEmpty()) {
return false;
}
for (Vehicle vehicle : vehicles) {
if (vehicle.isWarning()) {
return true;
}
}
return false;
}
private boolean isActiveDay(List<Vehicle> vehicles, int day) {
if (vehicles == null || vehicles.isEmpty()) {
return true;
}
for (Vehicle vehicle : vehicles) {
if (vehicle.getDays() == null || vehicle.getDays().length == 0 || !vehicle.getDays()[day]) {
return false;
}
}
return true;
}
public void bind2(ParentVehicle parentVehicle, boolean showArrow) {
novText.setText(parentVehicle.getName());
strelka.setVisibility(showArrow ? View.VISIBLE : View.GONE);
}
}
static class ChildItemViewHolder extends ChildViewHolder {
TextView novText2;
TextView day7;
TextView day6;
TextView day5;
TextView day4;
TextView day3;
TextView day2;
TextView day1;
TextView mId;
ImageView mBattery;
ImageView mGsimbol;
ImageView mWarning;
private View mView;
public ChildItemViewHolder(View itemView, int viewType) {
super(itemView);
this.mView = itemView;
ButterKnife.bind(this, itemView);
if (viewType==0){
day7 = itemView.findViewById(R.id.number_7);
day6 = itemView.findViewById(R.id.number_6);
day5=itemView.findViewById(R.id.number_5);
day4=itemView.findViewById(R.id.number_4);
day3=itemView.findViewById(R.id.number_3);
day2=itemView.findViewById(R.id.number_2);
day1=itemView.findViewById(R.id.number_1);
mId=itemView.findViewById(R.id.item_unit_id);
mBattery=itemView.findViewById(R.id.item_battery);
mGsimbol=itemView.findViewById(R.id.item_gsimbol);
mWarning=itemView.findViewById(R.id.icon_warning);
} else if (viewType==1){
novText2=itemView.findViewById(R.id.item_numberEden);
}
}
public void bind(Vehicle vehicle, GroupsClickListener onItemClickListener) {
mId.setText(vehicle.getName());
if (vehicle.hasGeofenceAlarm()) {
mGsimbol.setVisibility(View.INVISIBLE);
} else {
mGsimbol.setVisibility(View.VISIBLE);
}
if (vehicle.isWarning()) {
mWarning.setVisibility(View.VISIBLE);
} else {
mWarning.setVisibility(View.INVISIBLE);
}
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onGroupChildItemClick(vehicle.getId());
}
});
day1.setBackgroundResource(vehicle.getDays()[0] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day2.setBackgroundResource(vehicle.getDays()[1] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day3.setBackgroundResource(vehicle.getDays()[2] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day4.setBackgroundResource(vehicle.getDays()[3] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day5.setBackgroundResource(vehicle.getDays()[4] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day6.setBackgroundResource(vehicle.getDays()[5] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
day7.setBackgroundResource(vehicle.getDays()[6] ? R.drawable.green_rectangle : R.drawable.red_rectangle);
}
public void bind2(Vehicle vehicle, GroupsClickListener onItemClickListener) {
novText2.setText(vehicle.getName());}
}
}
我收到了这个错误:
java.lang.IllegalArgumentException:viewType 在 com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter.onCreateViewHolder(ExpandableRecyclerViewAdapter.java:57) 在 android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6493) 在 android 无效.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5680) 在 android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563) 在 android.support.v7.widget.RecyclerView $Recycler.getViewForPosition(RecyclerView.java:5559) 在 android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229) 在 android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556) ) 在安卓。support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516) 在 android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608) 在 android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView. java:3693) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) 在 android.view.View.measure(View.java:18930) 在 android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3109) :5976) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:765) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:647) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) .view.View.measure(View.java:18930) 在 android.widget.LinearLayout。在 android.view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:649) 的 measureHorizontal(LinearLayout.java:1109) :5976) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:765) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:647) 在 android .view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) 在 android.widget.LinearLayout。在 android.widget.LinearLayout 处测量水平(LinearLayout.java:1129)。onMeasure(LinearLayout.java:649) 在 android.view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java :1486) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:765) 在 android.view.View.measure(View.java:18930) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:647) 在 android .view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 在 android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 在 android。 view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:765) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:647) 在 android。 view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 在 android.view.View.measure (View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:第765章)647) 在 android.view.View.measure(View.java:18930) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 在 com。 android.internal.poli
块引用
我究竟做错了什么?为什么我得到 viewType 无效?
解决方案
我尝试使用相同的 ExpandableRecyclerViewAdapter,我想指出几件事。
首先,关于您的错误,您会得到这个,因为如果您查看 ExpandableRecyclerViewAdapter 类的 onCreateViewHolder 方法,它期望两者中的任何一个 - ExpandableListPosition.GROUP 或 ExpandableListPosition.CHILD 的值分别为 2 和 1。
现在,您犯的第一个错误是您将 getItemViewType 的 viewtype 值覆盖为 0 和 1,其中 in 1 已在库中使用,因此它会根据库类向您抛出非法异常,这是正确的。
现在为了像我一样获得多个子视图,
首先使用 MultiTypeExpandableRecyclerViewAdapter 扩展您的适配器类并创建 2 个扩展 ChildViewHolder 的类,然后如果您看到类扩展声明,它将如下所示:
public class ScoreCardDataAdapter extends MultiTypeExpandableRecyclerViewAdapter<TeamScoreCardViewHolder, ChildViewHolder> {
此外,我使用 2 个变量作为视图类型,分别为 TYPE_HEADER 和 TYPE_ITEM,值为 3 和 4。您可以使用任何变量,但要确保它大于 2。
然后覆盖以下方法:
@Override
public boolean isChild(int viewType) {
return viewType == TYPE_HEADER || viewType == TYPE_ITEM;
}
在这个方法中,我实现了一个方法,说第一个位置是标题并在这种情况下返回 TYPE_HEADER。
@Override
public int getChildViewType(int position, ExpandableGroup group, int childIndex) {
if(isPositionHeader(childIndex))
return TYPE_HEADER;
else
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
然后在你的 onCreateChildViewHolder 中,
您可以检查视图类型并返回预期的 VIEWHOLDER。
并通过调用以下方法绑定视图:
@Override
public void onBindChildViewHolder(ChildViewHolder holder, int flatPosition, ExpandableGroup group,
int childIndex) {
int viewType = getItemViewType(flatPosition);
//here based on the view type pass the appropriate data.
}
请参阅下面我的完整适配器类实现供您参考。
public class ScoreCardDataAdapter extends MultiTypeExpandableRecyclerViewAdapter<TeamScoreCardViewHolder, ChildViewHolder> {
private static final int TYPE_HEADER = 3;
private static final int TYPE_ITEM = 4;
public ScoreCardDataAdapter(Fragment fragment, List<? extends ExpandableGroup> groups) {
super(groups);
}
@Override
public TeamScoreCardViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.team_score_card_parent_view_holder, parent, false);
return new TeamScoreCardViewHolder(view);
}
@Override
public ChildViewHolder onCreateChildViewHolder(ViewGroup parent, final int viewType) {
if(viewType == TYPE_ITEM) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.team_score_card_data_child_view_holder, parent, false);
return new ScoreCardDataViewHolder(view, TYPE_ITEM);
} else if(viewType == TYPE_HEADER) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_item, parent, false);
return new ScoreCardHeaderViewHolder(view, TYPE_HEADER);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindChildViewHolder(ChildViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
int viewType = getItemViewType(flatPosition);
if(viewType == TYPE_HEADER) {
//Currently I am passing string and binding it to ScoreCardHeaderViewHolder
// but we can pass any data.
((ScoreCardHeaderViewHolder) holder).onBind("batsman");
} else if(viewType == TYPE_ITEM) {
//here I am getting my data from api passed to adapter and binding it to the ScoreCardDataViewHolder
final BattingData battingData = ((BattingDataExpandable) group).getItems().get(childIndex);
((ScoreCardDataViewHolder) holder).onBind(battingData, group, childIndex);
}
}
@Override
public void onBindGroupViewHolder(TeamScoreCardViewHolder holder, int flatPosition, ExpandableGroup group) {
holder.setTeamName(group);
}
@Override
public boolean isChild(int viewType) {
return viewType == TYPE_HEADER || viewType == TYPE_ITEM;
}
@Override
public int getChildViewType(int position, ExpandableGroup group, int childIndex) {
if(isPositionHeader(position))
return TYPE_HEADER;
else
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
}
推荐阅读
- python - 使用wireshark和python查看我自己的以太网原始连接
- ios - 实例成员 'decode' 不能用于类型 'JSONDecoder';你的意思是改用这种类型的值吗
- javascript - 我不明白如何使用它或它做什么,_loadResourcesAsync 来自 react native expo default project with screen
- java - 0:00 到 00:59 之间的 SQL 时间值设置为 23:xx
- roblox - ROBLOX Studio ScreenGui 乐谱显示
- html - CSS 部分对齐
- rest - 谷歌+ REST API。有什么方法可以从 Post 的 URL 获取到 activityId?
- vba - 内容控件如何在重复部分内容控件中被索引?
- jquery - 通过 AJAX 发送的字符串中的 JS 运算符导致请求失败
- python - Hyperledger Sawtooth 输入和输出值