RecyclerView 与 CardView

RecyclerView With CardView

我正在使用 RecyclerView + CardView 来列出 A-Z 的所有国家/地区,就像我在这里所做的那样

但我希望它们并排排列,所以保存 space 像这样

实现此目标的最佳方法是什么?

卡适配器

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

List<Nationality> mItems;

public CardAdapter() {
    super();
    mItems = new ArrayList<Nationality>();
    Nationality movie = new Nationality();
    movie.setThumbnail(R.drawable.afghanistan);
    movie.setName("Afghanistan");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.albania);
    movie.setName("Albania");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.algeria);
    movie.setName("Algeria");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.american_samoa);
    movie.setName("American Samoa");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.andorra);
    movie.setName("Andorra");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.angola);
    movie.setName("Angola");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.anguilla);
    movie.setName("Anguilla");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.antigua_and_barbuda);
    movie.setName("Antigua and Barbuda");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.argentina);
    movie.setName("Argentina");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.armenia);
    movie.setName("Armenia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.aruba);
    movie.setName("Aruba");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.australia);
    movie.setName("Australia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.austria);
    movie.setName("Austria");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.azerbaijan);
    movie.setName("Azerbaijan");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bahamas);
    movie.setName("Bahamas");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bahrain);
    movie.setName("Bahrain");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bangladesh);
    movie.setName("Bangladesh");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.barbados);
    movie.setName("Barbados");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.belarus);
    movie.setName("Belarus");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.belgium);
    movie.setName("Belgium");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.belize);
    movie.setName("Belize");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.benin);
    movie.setName("Benin");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bermuda);
    movie.setName("Bermuda");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bhutan);
    movie.setName("Bhutan");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bolivia);
    movie.setName("Bolivia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bosnia_and_herzegovina);
    movie.setName("Bosnia and Herzegovina");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.botswana);
    movie.setName("Botswana");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.brazil);
    movie.setName("Brazil");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.british_virgin_islands);
    movie.setName("British Virgin Islands");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.brunei);
    movie.setName("Brunei");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.bulgaria);
    movie.setName("Bulgaria");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.burkina_faso);
    movie.setName("Burkina Faso");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.burundi);
    movie.setName("Burundi");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cambodia);
    movie.setName("Cambodia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cameroon);
    movie.setName("Cameroon");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.canada);
    movie.setName("Canada");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cape_verde);
    movie.setName("Cape Verde");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cayman_islands);
    movie.setName("Cayman Islands");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.central_african_republic);
    movie.setName("Central African Republic");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.chad);
    movie.setName("Chad");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.chile);
    movie.setName("Chile");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.china);
    movie.setName("China");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.colombia);
    movie.setName("Colombia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.comoros);
    movie.setName("Comoros");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cook_islands);
    movie.setName("Cook Islands");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.costa_rica);
    movie.setName("Costa Rica");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cote_divoire);
    movie.setName("Cote d'Ivoire");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.croatia);
    movie.setName("Croatia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cuba);
    movie.setName("Cuba");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cayman_islands);
    movie.setName("Cayman Island");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.curacao);
    movie.setName("Curacao");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.cyprus);
    movie.setName("Cyprus");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.czech_republic);
    movie.setName("Czech Republic");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.democratic_republic_of_the_congo);
    movie.setName("Democratic Republic of the Congo");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.denmark);
    movie.setName("Denmark");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.djibouti);
    movie.setName("Djibouti");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.dominica);
    movie.setName("Dominica");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.dominican_republic);
    movie.setName("Dominican Republic");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.ecuador);
    movie.setName("Ecuador");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.egypt);
    movie.setName("Egypt");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.el_salvador);
    movie.setName("El Salvador");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.england);
    movie.setName("England");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.equatorial_guinea);
    movie.setName("Equatorial Guinea");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.eritrea);
    movie.setName("Eritrea");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.estonia);
    movie.setName("Estonia");
    mItems.add(movie);

    movie = new Nationality();
    movie.setThumbnail(R.drawable.ethiopia);
    movie.setName("Ethiopia");
    mItems.add(movie);



}

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

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    Nationality movie = mItems.get(i);
    viewHolder.natThumbnail.setImageResource(movie.getThumbnail());
    viewHolder.natName.setText(movie.getName());
}

@Override
public int getItemCount() {

    return mItems.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

    public ImageView natThumbnail;
    public TextView natName;


    public ViewHolder(View itemView) {
        super(itemView);
        natThumbnail = (ImageView)itemView.findViewById(R.id.layoutThumbnail);
        natName = (TextView)itemView.findViewById(R.id.layoutName);
    }
}
}

国籍

public class Nationality {
private int natThumb;
private String natName;


public int getThumbnail() {
    return natThumb;
}

public void setThumbnail(int thumbnail) {
    this.natThumb = thumbnail;
}


public String getName() {
    return natName;
}

public void setName(String name) {
    this.natName = name;
}

}

RecyclerView 布局

<LinearLayout 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="match_parent"
android:orientation="vertical">

<android.support.v7.widget.CardView
    android:layout_width="180dp"
    android:layout_height="wrap_content"
    android:foreground="?android:attr/selectableItemBackground"
    card_view:cardCornerRadius="3dp"
    card_view:cardUseCompatPadding="true">

    <RelativeLayout
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:background="#DDD">

        <ImageView
            android:id="@+id/layoutThumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:src="@drawable/afghanistan"
            android:gravity="center_vertical"
            android:layout_centerHorizontal="true"
            />
        <TextView

            android:id="@+id/layoutName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Country Name"
            android:textSize="@dimen/abc_text_size_body_1_material"
            android:layout_below="@id/layoutThumbnail"
            android:layout_centerInParent="true"

            />
    </RelativeLayout>

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

是的PM25793评论是对的

将 layoutManager 设置为 recyclerView 上的 gridLayoutManagar,如下所示

    recyclerView= (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);

    GridLayoutManager glm = new GridLayoutManager(this, 2); // 2 columns in each row
    glm.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(glm);