Android 如何正确构建GridViewAdapter?

Android 如何正确构建GridViewAdapter?,android,gridview,android-adapter,gridlayoutmanager,main-activity,Android,Gridview,Android Adapter,Gridlayoutmanager,Main Activity,我试图创建一个有6个按钮的GridView,我想在按钮上显示6个不同的名称 以下是我的带有GridView的activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto

我试图创建一个有6个按钮的GridView,我想在按钮上显示6个不同的名称

以下是我的带有GridView的activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.aaron.waller.girdlayoutmanagertest.MainActivity">


    <GridView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/gridView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:numColumns="auto_fit"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:columnWidth="120dp"
        android:stretchMode="spacingWidthUniform"/>
</RelativeLayout>

下面是single_item.xml(在本例中,它只是一个普通按钮):


这是我的strings.xml,有6个名称:

<resources>
    <string name="app_name">GirdLayoutManagerTest</string>
    <string-array name="button_names">
        <item>Name1</item>
        <item>Name2</item>
        <item>Name3</item>
        <item>Name4</item>
        <item>Name5</item>
        <item>Name6</item>
    </string-array>
</resources>

GirdLayoutManagerTest
名称1
姓名2
名字3
名字4
名字5
名字6
最后是my MainActivity.java:

import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    GridView gridView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gridView =(GridView)findViewById(R.id.gridView);
        gridView.setAdapter(new GridAdapter(this));
    }
}
class ButtonNames{

    String buttonNames;
    ButtonNames(String buttonNames){

        this.buttonNames = buttonNames;
    }
}
class GridAdapter extends BaseAdapter{

    ArrayList<ButtonNames> list;
    Context context;
    GridAdapter(Context context){
        this.context = context;
        list= new ArrayList<ButtonNames>();
        Resources res = context.getResources();
        String[] tempButtonNames = res.getStringArray(R.array.button_names);
        for(int i = 0; i<6; i++){
            ButtonNames tempButton = new ButtonNames(tempButtonNames[i]);
            list.add(tempButton);
        }

    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View row = view;
        if(row == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.single_item, viewGroup, false);


        }else{
            row.getTag();
        }

        return row;
    }
}
导入android.content.Context;
导入android.content.res.Resources;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
GridView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView=(gridView)findViewById(R.id.gridView);
setAdapter(新的GridAdapter(this));
}
}
类钮扣{
串钮扣;
按钮名称(字符串按钮名称){
this.buttonNames=buttonNames;
}
}
类GridAdapter扩展了BaseAdapter{
数组列表;
语境;
GridAdapter(上下文){
this.context=上下文;
列表=新的ArrayList();
Resources res=context.getResources();
String[]tempButtonNames=res.getStringArray(R.array.button\u名称);

对于(int i=0;i更新GridAdapter的getView()方法:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View row = view;
    if(row == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.single_item, viewGroup, false);

        //ADD THESE LINES
        Button btn = (Button) row.findViewById(R.id.button);
        btn.setText(list.get(i));

    }else{
        row.getTag();
    }

    return row;
}

更新GridAdapter的getView()方法:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View row = view;
    if(row == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.single_item, viewGroup, false);

        //ADD THESE LINES
        Button btn = (Button) row.findViewById(R.id.button);
        btn.setText(list.get(i));

    }else{
        row.getTag();
    }

    return row;
}

为什么要使用Gridview。Android为Recyclerview提供了此功能。如果您接触过Recyclerview,您只需要设置GridLayoutManager而不是LinearLayoutManager

GridLayoutManager lLayout=新的GridLayoutManager(这个,2); yourRecyclerView.setLayoutManager(lLayout)

其余部分将与您在Recyclerview适配器中设置的数据相同

将您的activity_main.xml更改为此

    <android.support.v7.widget.RecyclerView   xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
希望你的问题得到解决


最好使用RecyclerView,因为它是推荐的。

为什么要使用Gridview。Android为RecyclerView提供了此功能。如果您接触过RecyclerView,您只需要设置GridLayoutManager而不是LinearLayoutManager

GridLayoutManager lLayout=新的GridLayoutManager(这个,2); yourRecyclerView.setLayoutManager(lLayout)

其余部分将与您在Recyclerview适配器中设置的数据相同

将您的activity_main.xml更改为此

    <android.support.v7.widget.RecyclerView   xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
希望你的问题得到解决

最好使用RecyclerView,因为它是推荐的。

请尝试tempButton.settext(tempButtonNames[i].toString());用于loop@ZakiPathan“无法解析方法‘settext’”。请在中尝试tempButton.settext(tempButtonNames[i].toString());用于loop@ZakiPathan“无法解析方法'settext'”
compile 'com.android.support:recyclerview-v7:25.3.0'