【问题标题】:Android Java Use a cardview to display the items of a gridviewAndroid Java 使用cardview来显示gridview的项目
【发布时间】:2021-09-24 15:52:52
【问题描述】:

大家好,我想用GridView 显示一些显示字符串数组内容的项目。这是我要设置为项目的CardView

所以当我点击一个按钮时,选择电影类型的布局变得可见,我设置了一个适配器:

cTBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                postaCardVIew.setVisibility(View.GONE);
                cT.setVisibility(View.VISIBLE);

                GridView simpleGridView = findViewById(R.id.simpleGridView);

                String genrelist[] = {"Commedia", "Animazione", "Anime", "Avventura", "Azione", "Biografico", "Documentario", "Drammatico", "Fantascienza","Fantasy",
                        "Guerra", "Horror", "Musical", "Storico", "Thriller", "Western", "Giallo", "Sentimentale",
                };

                final ArrayAdapter<String> adapter = new ArrayAdapter<String> (posta.this,android.R.layout.simple_list_item_1, genrelist);
                simpleGridView.setAdapter(adapter);
}

但这就是我得到的:

我想放大这个布局:

<?xml version="1.0" encoding="utf-8"?>

    <androidx.cardview.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="150dp"
        android:layout_height="150dp"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:cardCornerRadius="30dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <TextView
            android:id="@+id/type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Type"
            android:layout_centerInParent="true"
            android:textSize="20dp"
            android:textStyle="bold"
            />
    
        </RelativeLayout>
    
    
</androidx.cardview.widget.CardView>

要得到这样的东西:

任何人都可以帮我弄清楚如何扩展所需的布局吗?

【问题讨论】:

    标签: java android gridview layout-inflater android-inflate


    【解决方案1】:

    为了使用自定义项布局,您需要创建一个从BaseAdapterArrayAdapter 扩展的自定义适配器

    然后在 getView() 方法中膨胀并构建您的项目布局:

    
    public class CustomAdapter extends BaseAdapter {
    
        String genrelist[] = {"Commedia", "Animazione", "Anime", "Avventura", "Azione", "Biografico", "Documentario", "Drammatico", "Fantascienza", "Fantasy",
                "Guerra", "Horror", "Musical", "Storico", "Thriller", "Western", "Giallo", "Sentimentale",
        };
    
    
        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
    
            ViewHolder holder;
    
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
                holder = new ViewHolder();
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.title = convertView.findViewById(R.id.type);
            holder.title.setText(genrelist[position]);
            return convertView;
        }
    
        static class ViewHolder {
            TextView title;
        }
    
    
    
        public int getCount() {
            return genrelist.length;
        }
    
        public Object getItem(int position) {
            return null;
        }
    
        public long getItemId(int position) {
            return 0;
        }
    }
    

    并将其用作GridView 适配器:

    cTBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            postaCardVIew.setVisibility(View.GONE);
            cT.setVisibility(View.VISIBLE);
    
            GridView simpleGridView = findViewById(R.id.simpleGridView);
    
            simpleGridView.setAdapter(new CustomAdapter());
        }
    });
    

    我不得不操纵边距和关心的宽度,并用 FrameLayout 包裹 CardView 以强制卡片之间的边距:

    <?xml version="1.0" encoding="utf-8"?>
    
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="4dp"
        android:layout_marginVertical="4dp">
    
        <androidx.cardview.widget.CardView xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="120dp"
            android:layout_height="120dp"
            app:cardCornerRadius="30dp">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
                <TextView
                    android:id="@+id/type"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:text="Type: 1"
                    android:textSize="18sp"
                    android:textStyle="bold" />
    
            </RelativeLayout>
    
        </androidx.cardview.widget.CardView>
    </FrameLayout>
    

    结果:

    【讨论】:

    • 感谢您的回复,稍后我会尝试您的代码,如果它解决了我的问题,请告诉您
    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多