java - fragment 中的 CardView 不可见

标签 java android android-cardview

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

我尝试通过 Java 手动设置 CardView 的可见性,但它仍然不可见。我相信 fragment 的布局可能会覆盖 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>

最佳答案

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

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

关于java - fragment 中的 CardView 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32151276/

相关文章:

java - 使用 JavaOSC 向 Android 发送/接收 OSC 消息

java - Spring 安全: @PreAuthorize works only together with @RequestMapping

java - 如何在 JavaScript 中实现这个 java 模式(使用继承)?

android - 如何通过单击卡片 View 中的按钮来填充回收器 View

java - 无法在 Cardview 中正确嵌套 GridView

android - CardView 内部的 TabLayout

java - 如何使 Android 产品成为消费品

android - 如何在 MVP 模式下保持 EditText 中的脏状态?

android - ActionBar 覆盖 GridView 填充或自定义 GridView 以显示整个第一张图片?

java - Eclipse中的Android项目中的R.java是如何生成的?