代码之家  ›  专栏  ›  技术社区  ›  AtarC5

使用Recyclerview创建CardView

  •  -2
  • AtarC5  · 技术社区  · 7 年前

    我在Stackerflow和Youtube上使用Recyclerview创建卡片视图,就像每个教程中说的那样。这对我来说很管用,但当我运行应用程序时,它显示的内容就像只有一个包含全部数据的Cardview。

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/reciclador"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="3dp"
        android:scrollbars="vertical" />
    

    布局卡:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="4dp">
    
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
    
    
            <ImageView
                android:id="@+id/imgRestaurant"
                android:layout_width="400dp"
                android:layout_height="100dp"
                android:layout_alignParentEnd="true"
                android:layout_alignParentTop="true"
                android:layout_marginTop="18dp"
                card_view:srcCompat="@drawable/soporte_it" />
    
            <TextView
                android:id="@+id/lblNombre"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/imgRestaurant"
                android:layout_marginTop="10dp"
                android:text="Restaurant Soporte" />
    
            <TextView
                android:id="@+id/lblDescripcion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/lblNombre"
                android:layout_marginTop="22dp"
                android:text="TextView" />
    
        </RelativeLayout>
    </android.support.v7.widget.CardView>
    

    数据类(clsRestaurants):

    package com.soft.kukito.cardviewprueba;
    
    /**
     * Created by Hernan on 16/7/2017.
     */
    
    public class clsRestaurants {
        private int imagen_r;
        private String nombre_r;
        private String descripcion_r;
    
        public clsRestaurants(int imagen_r, String nombre_r, String descripcion_r) {
            this.imagen_r = imagen_r;
            this.nombre_r = nombre_r;
            this.descripcion_r = descripcion_r;
        }
    
        public int getImagen_r() {
            return imagen_r;
        }
    
        public String getNombre_r() {
            return nombre_r;
        }
    
        public String getDescripcion_r() {
            return descripcion_r;
        }
    }
    

       package com.soft.kukito.cardviewprueba;
    
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    
    import static android.os.Build.VERSION_CODES.M;
    
    /**
     * Created by Hernan on 16/7/2017.
     */
    
    public class restaurantsAdapter extends RecyclerView.Adapter<restaurantsAdapter.restaurantsViewHolder>
    {
    
        private ArrayList<clsRestaurants> restaurant_item;
    
        public restaurantsAdapter(ArrayList<clsRestaurants> restaurant_item) {
            this.restaurant_item = restaurant_item;
        }
    
        @Override
        public restaurantsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_cards,viewGroup,false);
            restaurantsViewHolder restaurants = new restaurantsViewHolder(v);
            return restaurants;
        }
    
        @Override
        public void onBindViewHolder(restaurantsViewHolder restaurantsViewHolder, int i) {
            restaurantsViewHolder.nombre.setText(restaurant_item.get(i).getNombre_r());
            restaurantsViewHolder.descripcion.setText(restaurant_item.get(i).getDescripcion_r());
            restaurantsViewHolder.imagen.setImageResource(restaurant_item.get(i).getImagen_r());
        }
    
        @Override
        public int getItemCount() {
            return restaurant_item.size();
        }
    
        public class restaurantsViewHolder extends RecyclerView.ViewHolder{
            TextView nombre,descripcion;
            ImageView imagen;
    
            public restaurantsViewHolder(View itemView) {
                super(itemView);
    
                nombre=(TextView)itemView.findViewById(R.id.lblNombre);
                descripcion=(TextView) itemView.findViewById(R.id.lblDescripcion);
                imagen=(ImageView)itemView.findViewById(R.id.imgRestaurant);
            }
        }
    }
    

    我得到的: Result and problem


    预期结果: Expected result

    3 回复  |  直到 7 年前
        1
  •  2
  •   Andy    7 年前

    我想你可以给你的收入增加利润 CardView ,添加此行。

    android:layout_marginBottom="10dp"
    

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="4dp"
        android:layout_marginBottom="10dp">
    

    当然,在布局卡片中,您可以轻松地对左右边距执行相同的操作,使其看起来像您的预期结果。

        2
  •  0
  •   Arun Shankar    7 年前
        3
  •  0
  •   user8102348 user8102348    7 年前

    compile 'com.android.support:cardview-v7:23.4.0'
    

    并在回收器适配器的xml文件中使用以下代码(在其中为行项目编写代码)

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        card_view:cardBackgroundColor="@android:color/white"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="4dp"
        card_view:cardPreventCornerOverlap="false"
        card_view:cardUseCompatPadding="true">
    </android.support.v7.widget.CardView>
    

    将此标记用作根标记…完成!!!