小编Mas*_*ghi的帖子

Android:如何在CardView中插入RecyclerView?

我说的活动必须展现出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

15
推荐指数
2
解决办法
2万
查看次数

Android:RecyclerView.Adapter无法正常工作

我的问题id直接与@Richard有关,在RecyclerView.Adapter中关于onBindViewHolder()方法的问题没有被调用,因为他(和我)期望它这样做.

我注意到这个方法被正确调用,直到我的数据集结束(9个CardViews,向下滚动),但是当我尝试返回(向上滚动)时,它不再被调用.真正的问题是,在那里我在数据集中进行了更改并调用了notifyDataSetChanged(),但是由于这种奇怪的(对我来说)行为,我的修改不应该发生.

我附上的图片想要澄清:

  • 我到达Rec.View的底部(cardView - 仰望:一切都很好);
  • 处理卡片已经完全或部分显示没有问题(仰卧,Gerund和Participle);
  • 但是当我到达第一个完全被遮挡的cardView时,onBindViewHolder()不再被调用了,我可以从调试中看到链接到适配器的数据集是"Supine",并且这里是:显示了Supine cardView.

从RecyclerView的底部向上滚动 - 对不起质量问题

我认为这是理查德在他的问题中遇到的完全相同的问题,我尝试了他完全相同的解决方案:我在我的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

4
推荐指数
1
解决办法
1万
查看次数