2015-08-22 96 views
1

我有一個主要活動(ActivityMain.java),我想用它來在四個片段之間導航。在其中一個片段中,我試圖將CardView與RecyclerView一起放置以創建垂直卡片列表。不過,到目前爲止,我運行應用程序時一直無法顯示任何顯示卡。 CardView將在Android Studio的設計預覽中完美顯示,但是當使用實際的設備/模擬器時,它會消失。CardView在片段中是不可見的

我試過通過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> 
+0

您已發佈過量的代碼...請參閱如何創建[MCVE](http://stackoverflow.com/help/mcve)。 – deezy

+1

@DizzyCode我的歉意。我已經刪除了與問題沒有直接關係的代碼。 – brandonmiles

回答

2

在玩了一些變化後,我終於發現瞭解決方案。我所做的是將Article對象添加到主片段的onCreateView方法的列表中。另外,我在ViewHolder中實例化了CardView,儘管這並沒有幫助我最初看到這些卡片。

因此,如果您曾經處於類似的困境中,並且無法找出解決方案,請嘗試在設置它們之前實際創建對象。

1

你需要調用notifyDataSetChanged();在onCreateViewHolder添加新的文章後,以便更新itemcount

+0

謝謝,我沒有考慮到這一點。但是,應該顯示數據的卡仍然不可見。 – brandonmiles