0

在我問之前,我可能會有一個奇怪的句子,因爲我的英語說得不好。請事先確認。Cardview沒有顯示在recyclerview

我試圖通過在片段中放入回收視圖來顯示卡片視圖。但是,卡片視圖根本不可見。如果你能告訴我問題是什麼,我將不勝感激。

Home.java

package com.rudolphriding.giftfriend; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import java.util.ArrayList; 
import java.util.List; 

public class Home extends Fragment 
{ 
    private RecyclerView recyclerView; 
    private LinearLayoutManager layoutManager; 
    private RecyclerAdapter adapter; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
    { 
     View hView = inflater.inflate(R.layout.fragment_home, container, false); 

     //recyclerview 
     recyclerView = (RecyclerView)hView.findViewById(R.id.home_recyclerview); 

     initData(); 

     layoutManager = new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 

     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setAdapter(adapter); 
     recyclerView.scrollToPosition(0); 



     return hView; 
    } 
/* 
    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     initData(); 
    } 
*/ 

    private void initData() 
    { 
     List<RecyclerItem> items = new ArrayList<>(); 
     RecyclerItem[] item = new RecyclerItem[2]; 
     item[0] = new RecyclerItem(R.drawable.rudingworld_start1, "TEST#1", "SUBTEST#1"); 
     item[1] = new RecyclerItem(R.drawable.rudingworld_start2, "TEST#2", "SUBTEST#2"); 

     for(int i = 0; i < 2; i++) 
     { 
      items.add(item[i]); 
     } 
    } 
} 

RecyclerAdapter.java

package com.rudolphriding.giftfriend; 

import android.annotation.TargetApi; 
import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Build; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.List; 

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> 
{ 
    Context context; 
    List<RecyclerItem> items; 
    int itemLayout; 

    public RecyclerAdapter(Context context, List<RecyclerItem> items, int itemLayout) 
    { 
     this.context = context; 
     this.items = items; 
     this.itemLayout = itemLayout; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_trend_cardview, parent, false); 
     return new ViewHolder(v); 
    } 

    //@TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) 
    { 
     final RecyclerItem item = items.get(position); 

     holder.image.setImageResource(item.getBackground()); 
     holder.title.setText(item.getTitle()); 
     holder.subtitle.setText(item.getSubtitle()); 

     holder.cardview.setOnClickListener(new View.OnClickListener() 
       { 
        @Override 
        public void onClick(View v) 
        { 
        Toast.makeText(context,item.getTitle(),Toast.LENGTH_SHORT).show(); 
        } 
       } 
       ); 
    } 

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

    public class ViewHolder extends RecyclerView.ViewHolder { 
     ImageView image; 
     TextView title; 
     TextView subtitle; 
     CardView cardview; 

     public ViewHolder(View itemView) { 
      super(itemView); 

      image = (ImageView)itemView.findViewById(R.id.cardview_image_title); 
      title = (TextView)itemView.findViewById(R.id.cardview_text_title); 
      subtitle = (TextView)itemView.findViewById(R.id.cardview_text_subtitle) ; 
      cardview = (CardView)itemView.findViewById(R.id.cardview); 
     } 
    } 
} 

*有沒有註釋的差異或不@TargetApi

RecyclerItem.java

public class RecyclerItem 
{ 
    int background; 
    String title; 
    String subtitle; 


    public int getBackground() { return this.background; } 

    public String getTitle() { return title; } 

    public String getSubtitle() { return subtitle; } 



    public RecyclerItem(int background, String title, String subtitle) 
    { 
     this.background = background; 
     this.title = title; 
     this.subtitle = subtitle; 
    } 
} 

fragm ent_home.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/home_recyclerview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 


    </android.support.v7.widget.RecyclerView> 

</RelativeLayout> 

item_trend_cardview.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <com.rudolphriding.giftfriend.SquareCardView 
     android:id="@+id/cardview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:elevation="2dp"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <ImageView 
       android:id="@+id/cardview_image_title" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@drawable/rudingworld_start1"/> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#80000000" 
       android:orientation="vertical" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:padding="16dp"> 

        <TextView 
         android:id="@+id/cardview_text_title" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingBottom="8dp" 
         android:paddingTop="8dp" 
         android:text="Title goes here" 
         android:textColor="#FFFFFF" 
         android:textSize="24sp" 
         android:textStyle="bold"/> 

        <TextView 
         android:id="@+id/cardview_text_subtitle" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Subtitle here" 
         android:textColor="#FFFFFF" 
         android:textSize="14sp"/> 

       </LinearLayout> 


       <!--LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:padding="8dp"> 

        <Button 
         android:id="@+id/cardview_button_01" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:paddingRight="8dp" 
         android:background="#00000000" 
         android:text="Action1" 
         android:textColor="#FFFFFF"/> 

        <Button 
         android:id="@+id/cardview_button_02" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:background="#00000000" 
         android:text="Action2" 
         android:textColor="#FFFFFF"/> 


       </LinearLayout--> 

      </LinearLayout> 
     </RelativeLayout> 




    </com.rudolphriding.giftfriend.SquareCardView> 


</RelativeLayout> 

*有自定義圖像視圖把方形圖像的卡片視圖。

*我也註釋了按鈕,因爲我不知道如何讓它們出現在卡片視圖中。

SquareImageView.java

package com.rudolphriding.giftfriend; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class SquareImageView extends android.support.v7.widget.AppCompatImageView { 

    public SquareImageView(Context context) { 
     super(context); 
    } 

    public SquareImageView(Context context, AttributeSet attrs) { super(context, attrs); } 

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = MeasureSpec.getSize(heightMeasureSpec); 
     int size = width > height ? height : width; 
     setMeasuredDimension(size, size); // make it square 
    } 

} 

花了很多天,但我不知道什麼是錯呢。歡迎任何建議。

+0

如果生成,還請發佈任何錯誤/警告日誌。知道產生了什麼錯誤或警告是非常重要的。 –

+0

您似乎沒有將數據分配給適配器。你可以在'initData()'中生成它們,把它們放在一個名爲'items'的數組中,但是不要對這個數組做任何事情。您可能想要將這些項目分配給您的適配器。此外,它看起來像你永遠不會創建一個適配器。您只需將適配器(此時爲空)分配給回收站視圖。 – fjc

+0

@SnehPandya沒有錯誤信息。謝謝!我會參考下一個問題。 – Jihye

回答

0

您沒有創建適配器。試試這個:

private void initData() 
    { 
     List<RecyclerItem> items = new ArrayList<>(); 
     RecyclerItem[] item = new RecyclerItem[2]; 
     item[0] = new RecyclerItem(R.drawable.rudingworld_start1, "TEST#1", "SUBTEST#1"); 
     item[1] = new RecyclerItem(R.drawable.rudingworld_start2, "TEST#2", "SUBTEST#2"); 

     for(int i = 0; i < 2; i++) 
     { 
      items.add(item[i]); 
     } 
     adapter= new RecyclerAdapter(getActivity(), items, 
      R.layout.item_trend_cardview); 
    } 
+0

感謝您的友好回答!我嘗試應用你告訴我的方法,但它仍然不起作用。我會再嘗試。;( – Jihye

+1

你的代碼其餘部分看起來沒問題,也許你的問題存在於活動中,你是否正確地添加了你的片段?是否顯示片段? – Pablo

+0

我的想法正確,你可能想在調試模式下運行代碼並帶有一個斷點在主頁片段的onCreateView()中查看你的程序是否已經到達 –

0

從我所看到的,您需要初始化適配器併爲其分配生成的項目。現在,您的適配器從未初始化,只是保持null

一種可能的解決方案:

private void initData() 
    { 
     // ... 
     this.adapter = new RecyclerAdapter(getActivity(), items, R.layout.item_trend_cardview); 
    } 

更新:注意到R.layout.item_trend_cardview作爲實際佈局ID而不是示例性0之前。

+0

正確!謝謝您的回覆。它仍然不是固定的,我會更努力。 – Jihye