我说的活动必须展现出RecyclerView通过填充CardViews作为项目.我的目标是在每个CardView中显示一个RecyclerView.
这是我的Activity的基本xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ConjActivity" >
<android.support.v7.widget.RecyclerView
android:id="@+id/conjCardList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的CardView的RecyclerView的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_analysis"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:padding="5dp"
card_view:cardCornerRadius="5dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v7.widget.RecyclerView
android:id="@+id/item_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingLeft="@dimen/activity_horizontal_margin" >
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
所以,我大胆地通过实现两个RecyclerView.Adapters来实现我的第一次尝试,一个用于(让我们称之为)"主"RecyclerView,一个用于每个CardView中的单个:
以下是两段代码:
"Main"RecyclerView(带ViewHolders):
public class ConjCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private static Context context;
private LinearLayoutManager llm;
private static ConjFormAdapter formAdapt;
private ArrayList<String> adapterList;
private …Run Code Online (Sandbox Code Playgroud) android android-viewholder android-cardview recycler-adapter android-recyclerview
我的问题id直接与@Richard有关,在RecyclerView.Adapter中关于onBindViewHolder()方法的问题没有被调用,因为他(和我)期望它这样做.
我注意到这个方法被正确调用,直到我的数据集结束(9个CardViews,向下滚动),但是当我尝试返回(向上滚动)时,它不再被调用.真正的问题是,在那里我在数据集中进行了更改并调用了notifyDataSetChanged(),但是由于这种奇怪的(对我来说)行为,我的修改不应该发生.
我附上的图片想要澄清:

我认为这是理查德在他的问题中遇到的完全相同的问题,我尝试了他完全相同的解决方案:我在我的Adapter的构造函数中强制setHasStableIds()为true,
public CardAdapter(List<Object> items){
this.items = items;
adapterList = new ArrayList<String>();
formAdapt = new ConjFormAdapter(adapterList);
itemMap = new HashMap<Object, Long>();
setHasStableIds(true);
}
Run Code Online (Sandbox Code Playgroud)
其中itemMap是我在我的活动中实现的Map,用于设置我的数据集的唯一ID,
并以这种方式覆盖getItemId():
public long getItemId(int position) {
Object item = items.get(position);
return itemMap.get(item);
}
Run Code Online (Sandbox Code Playgroud)
但是你可以从图片中看到我仍然得到这个结果:好吗?
我的活动中itemMap的实现:
for(int i=0, j=0; i<conj_items.size(); i++, j++)
conjAdapter.getItemMap().put(conj_items.get(i), (long) j);
Run Code Online (Sandbox Code Playgroud)
其中conj_items是我传递给适配器的ArrayList.
android android-viewholder android-cardview recycler-adapter android-recyclerview
android ×2