如果我想在android中创建一个回收者视图内部的回收者视图,如何在回收者视图的第一个容器中处理视图持有者以及如何在两个回收者视图中处理传输?请给我一些建议。非常感谢你。
答案 0 :(得分:0)
问题陈述:我们必须在父回收站视图中显示三个项目。前两项是普通的cardViews,第三项是子回收站视图。
The top two items are card views and the third item is a list of hotels.
MainActivity.class :
public class **MainActivity** extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
ArrayList<DataModel> items = new ArrayList<>();
items.add(new DataModel("Bus"));
items.add(new DataModel("Flight"));
ArrayList<String> hotelsList=new ArrayList<>();
hotelsList.add("Hotel 1");
hotelsList.add("Hotel 2");
hotelsList.add("Hotel 2");
items.add(new DataModel("Hotels",hotelsList));
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
ParentAdapter parentAdapter = new ParentAdapter(items,MainActivity.this);
recyclerView.setAdapter(parentAdapter);
}
}
<强> activity_main.xml中强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
<强> DataModel.class 强>
public class DataModel {
private String title;
private ArrayList<String> hotels;
public DataModel(String title){
this.title=title;
}
public DataModel(String title, ArrayList<String> hotels){
this.title=title;
this.hotels=hotels;
}
public String getTitle() {
return title;
}
public ArrayList<String> getHotels() {
return hotels;
}
}
ParentAdapter.class :父级回收站视图
public class ParentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<DataModel> items;
private Context mContext;
public ParentAdapter(ArrayList<DataModel> items, Context mContext) {
this.items = items;
this.mContext=mContext;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
if (viewType == ViewType.NORMAL_ITEM) {
return new NormalHolder(layoutInflater.inflate(R.layout.normal_view, parent, false));
} else if (viewType == ViewType.HOTELS_LIST_ITEM) {
return new ListHolder(layoutInflater.inflate(R.layout.list_view, parent, false));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int cardType = getItemViewType(position);
switch (cardType) {
case ViewType.NORMAL_ITEM:
NormalHolder normalHolder=(NormalHolder) holder;
normalHolder.title.setText(items.get(position).getTitle());
break;
case ViewType.HOTELS_LIST_ITEM:
ListHolder listHolder=(ListHolder) holder;
HotelCardAdapter hotelCardAdapter = new HotelCardAdapter(mContext, items.get(position).getHotels());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
listHolder.hotelsList.setLayoutManager(linearLayoutManager);
listHolder.hotelsList.setAdapter(hotelCardAdapter);
break;
}
}
private interface ViewType {
int NORMAL_ITEM = 0;
int HOTELS_LIST_ITEM = 1;
}
@Override
public int getItemViewType(int position) {
if (position == 0 || position == 1) {
return ViewType.NORMAL_ITEM;
} else return ViewType.HOTELS_LIST_ITEM;
}
@Override
public int getItemCount() {
return items.size();
}
private class NormalHolder extends RecyclerView.ViewHolder {
TextView title;
public NormalHolder(View inflate) {
super(inflate);
title=inflate.findViewById(R.id.title);
}
}
private class ListHolder extends RecyclerView.ViewHolder {
RecyclerView hotelsList;
public ListHolder(View inflate) {
super(inflate);
hotelsList = inflate.findViewById(R.id.hotel_list);
}
}
}
<强> normal_view.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
card_view:cardCornerRadius="2dp"
card_view:contentPadding="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:padding="6dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bus"
android:textColor="@color/colorPrimary"
android:textSize="20sp"/>
<Button
android:id="@+id/view_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:text="View All"
android:textSize="12sp"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
<强> list_view.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
card_view:cardCornerRadius="2dp"
card_view:contentPadding="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="6dp">
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hotels"
android:textColor="@color/colorPrimary"
android:textSize="17sp"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/hotel_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
android:layout_marginTop="12dp"
android:orientation="horizontal"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
HotelCardAdapter.class :儿童回收站视图
public class HotelCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<String> hotelsObject;
private Context context;
public HotelCardAdapter(Context context, ArrayList<String> hotelsObject) {
this.hotelsObject = hotelsObject;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
return new HotelCarouselHolder(layoutInflater.inflate(R.layout.hotel_carousel_item, null));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
HotelCarouselHolder hotelCarouselHolder = (HotelCarouselHolder) holder;
hotelCarouselHolder.title.setText(hotelsObject.get(position));
}
@Override
public int getItemCount() {
return hotelsObject.size();
}
private class HotelCarouselHolder extends RecyclerView.ViewHolder {
private TextView title;
public HotelCarouselHolder(View inflate) {
super(inflate);
title = inflate.findViewById(R.id.title);
}
}
}
<强> hotel_carousel_item.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<RelativeLayout
android:id="@+id/hotel_details_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/hotel_image"
android:layout_width="256dp"
android:layout_height="144dp"
android:scaleType="centerCrop"
android:src="#999999"/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/hotel_image"
android:textSize="16sp"
android:text="Hotels 1"/>
</RelativeLayout>
</RelativeLayout>
希望这会有所帮助!!