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