我有一个GridView
,每个单元格我想填充一个名称列表,我需要这些列表可以动态更改。我尝试按如下方式实现这个想法:
public void fillBoard(int groupSize){
int numGroups = listPresentMembers.size()/groupSize;
ListView [] groups = new ListView [numGroups];
for(int i=0;i<numGroups;i++){
String [] items = new String[groupSize];
for(int j=0;j<groupSize;j++){
items[j] = listPresentMembers.get(i*groupSize + j);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,items);
groups[i] = new ListView(this);
groups[i].setAdapter(adapter);
}
ArrayAdapter<ListView> groupsAdapter = new ArrayAdapter<ListView>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,groups);
gridViewBoard.setAdapter(groupsAdapter);
}
基本思想是我创建ArrayAdapter
类型ListView
,其中每个项目都由我想要填充{{1}的特定单元格的名称组之一定义}}。然后,我将此GridView
设置为ArrayAdapter
。
问题在于,当我运行应用程序时,GridView
的元素是字符串,例如
“android.widget.ListView@41bcfa60”。我哪里出错了?
非常感谢!
答案 0 :(得分:2)
简短的回答:无论何时你看到像“android.widget.ListView@41bcfa60”这样的东西,都意味着你的代码中有些东西需要一个String而你给它一个对象(在本例中是一个ListView)。
那发生了什么?看一下GridView的适配器。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,items);
这是您正在使用的ArrayAdapter的构造函数:
public ArrayAdapter(Context context,int resource,int textViewResourceId,T [] objects)
参数的
context
当前背景。
resource
布局文件的资源ID,包含实例化视图时使用的布局。
textViewResourceId
要填充的布局资源中TextView的ID
objects
要在ListView中表示的对象。
您将android.R.layout.simple_list_item_1
作为resource
传递,这意味着它是您正在使用的布局。此布局由单个TextView组成 - 一行文本。 它不是为了容纳ListView而设计的。
当此布局想要填充TextView(textViewResourceId
)时,它会查看您传入的数组(items
)的相应元素并尝试从中获取文本 - 在Java中,我们通过在对象上调用toString()来实现这一点。如果没有实现toString(),默认情况下会返回类似你所获得的“android.widget.ListView@41bcfa60”乱码。
这就是为什么,但我认为你的代码存在更大的问题。如果我是你,我会强烈重新考虑涉及GridView的设计,其中每个网格项都是ListView。这根本不是传统的,所以可能有更好的方法来完成你想要做的任何事情。考虑发布另一个问题来解释您的目标并要求代码设计帮助。