Android 如何正确构建GridViewAdapter?
我试图创建一个有6个按钮的GridView,我想在按钮上显示6个不同的名称 以下是我的带有GridView的activity_main.xml: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
<?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'