片段中的 CardView 不可见

CardView in fragment is invisible

我有一个主 activity (ActivityMain.java),我想用它在四个片段之间导航。在其中一个片段中,我试图将 CardView 与 RecyclerView 结合使用以创建垂直的卡片列表。但是,到目前为止,当我 运行 应用程序时,我一直无法显示任何卡片。 CardView 将在 Android Studio 的设计预览中完美显示,但当使用实际 device/emulator 时它会消失。

我尝试通过 Java 手动设置 CardView 的可见性,但它仍然不可见。我相信片段的布局可能覆盖了 CardView 的布局,但我对 Android 开发还是很陌生,所以我不完全确定问题出在哪里。

下面我粘贴了可能与我的问题相关的 类 和 XML 文件。

AdapterMainFeed.java

public class AdapterMainFeed extends RecyclerView.Adapter<AdapterMainFeed.ViewHolderMainFeed> {
    private ArrayList<Article> listArticlesMain = new ArrayList<>();
    private LayoutInflater inflater;

    public AdapterMainFeed(Context context) {
        inflater = LayoutInflater.from(context);
    }

    public void setArticlesMain(ArrayList<Article> listArticlesMain) {
        this.listArticlesMain = listArticlesMain;
        notifyDataSetChanged();
    }

    @Override
    public ViewHolderMainFeed onCreateViewHolder(ViewGroup container, int i) {
        View layout = inflater.inflate(R.layout.view_main_feed, container, false);
        Article article1 = new Article("asdf", "ghj", "klm", new Date(0));
        Article article2 = new Article("sdfg", "hjk", "lmn", new Date(0));
        Article article3 = new Article("dfgh", "jkl", "mno", new Date(0));
        listArticlesMain.add(article1);
        listArticlesMain.add(article2);
        listArticlesMain.add(article3);
        return new ViewHolderMainFeed(layout);
    }

    @Override
    public void onBindViewHolder(ViewHolderMainFeed viewHolderMainFeed, int i) {
        Article currentArticle = listArticlesMain.get(i);
        viewHolderMainFeed.articleTitle.setText(currentArticle.getTitle());
        viewHolderMainFeed.articleAuthor.setText(currentArticle.getAuthor());
        viewHolderMainFeed.articleWebsite.setText(currentArticle.getWebsite());
        DateFormat formatter = DateFormat.getDateTimeInstance();
        final String timePosted = formatter.format(currentArticle.getTimePosted());
        viewHolderMainFeed.articleTime.setText(timePosted);
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public int getItemCount() {
        return listArticlesMain.size();
    }

    static class ViewHolderMainFeed extends RecyclerView.ViewHolder {
        TextView articleTitle;
        TextView articleAuthor;
        TextView articleWebsite;
        TextView articleTime;

        public ViewHolderMainFeed(View itemView) {
            super(itemView);
            articleTitle = (TextView) itemView.findViewById(R.id.mainArticleTitle);
            articleAuthor = (TextView) itemView.findViewById(R.id.mainArticleAuthor);
            articleWebsite = (TextView) itemView.findViewById(R.id.mainArticleWebsite);
            articleTime = (TextView) itemView.findViewById(R.id.mainArticleTime);
        }
    }  
}

view_main_feed.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context="com.convergeapp.converge.ActivityMain">

   <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        card_view:cardCornerRadius="7dp"
        card_view:cardBackgroundColor="@color/colorPurpleSeance"
        android:id="@+id/mainArticleCard"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:padding="8dp"
        android:clickable="true">

        <RelativeLayout
            android:id="@+id/mainArticleLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="16dp">

            <TextView
                android:id="@+id/mainArticleTitle"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"/>

            <TextView
                android:id="@+id/mainArticleAuthor"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/mainArticleTitle"/>

            <TextView
                android:id="@+id/mainArticleWebsite"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/mainArticleTime"/>

            <TextView
                android:id="@+id/mainArticleTime"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"/>
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

您需要调用notifyDataSetChanged();添加新文章后在 onCreateViewHolder 内,以便更新 itemcount

经过一番尝试,我终于找到了解决方案。我所做的是将 Article 对象添加到主要片段的 onCreateView 方法中的列表中。此外,我在 ViewHolder 中实例化了 CardView,尽管这并没有帮助我最初看到卡片。

因此,如果您遇到过类似的困境并且找不到解决方案,请尝试在设置对象之前实际创建对象。