具有不同布局的Android ListView(网格和列表)
我有一个带有自定义ArrayAdapter和2个自定义布局的ListView 列表视图(1x)'single_row.xml' 网格视图(3 x x)'Grid_row.xml' 我有两个单选按钮,在一个ID为“button1”和“button2”的放射组中 理想情况下,我希望我的ListView是默认的“single_row.xml”,并将onClickListeners设置为两个单选按钮 伪代码: 如果单击按钮1,适配器布局='single_row.xml' 如果单击按钮2,适配器布局='grid_row.xml'具有不同布局的Android ListView(网格和列表),android,listview,android-arrayadapter,onclicklistener,android-adapter,Android,Listview,Android Arrayadapter,Onclicklistener,Android Adapter,我有一个带有自定义ArrayAdapter和2个自定义布局的ListView 列表视图(1x)'single_row.xml' 网格视图(3 x x)'Grid_row.xml' 我有两个单选按钮,在一个ID为“button1”和“button2”的放射组中 理想情况下,我希望我的ListView是默认的“single_row.xml”,并将onClickListeners设置为两个单选按钮 伪代码: 如果单击按钮1,适配器布局='single_row.xml' 如果单击按钮2,适配器布局='g
设置:
list = (ListView) findViewById(R.id.listView);
myAdapter adapter = new myAdapter(this, memeTitles, images, memeDescriptions);
list.setAdapter(adapter);
适配器:
class myAdapter extends ArrayAdapter<String> {
int size = 1;
Context context;
int[] images;
String[] titleArray;
String[] descriptionArray;
myAdapter(Context c, String[] titles, int imgs[], String[] desc) {
super(c, R.layout.grid_row, R.id.textView, titles);
this.context = c;
this.images = imgs;
this.titleArray = titles;
this.descriptionArray = desc;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.grid_row, parent, false);
ImageView myImage = (ImageView) row.findViewById(R.id.imageView);
myImage.setImageResource(images[position]);
TextView myTitle = (TextView) row.findViewById(R.id.textView);
myTitle.setText(titleArray[position]);
TextView myDescription = (TextView) row.findViewById(R.id.textView2);
myDescription.setText(descriptionArray[position]);
return row;
}
}
提前谢谢 您需要做的是使用视图类型()并根据Radio Button设置类型 然而,如果说由于适配器当前的工作方式,您将遇到问题,那么您需要有一个对象(而不是字符串)支持适配器,这样当单选按钮被更改时,它将在该对象上设置它,稍后当您的视图被回收(阅读相关内容)时,您将不会丢失该状态
因此,在您的情况下,一旦您确定了视图类型,您就要将视图类型设置为“已保存”单选按钮状态,然后在调用“获取视图”时,将该视图充气,您还必须刷新单选按钮更改的视图。您是否有特定问题,或者是否希望有人为您编写代码?@Eluvatar抱歉,我只是很困惑。我编辑了这个问题来展示我正在尝试做什么:如何使用OnClickListener在ArrayAdapter中定位布局声明。只需使用gridview,即您当前的适配器,并调用在1(listview模式)和>1列(grid模式)之间切换@petey您能说得更具体一点吗?我不太明白这将如何帮助我根据单击的单选按钮交换布局资源。不要使用listview,而是使用gridview。通过这种方式,您可以在onclicklistener中使用上面的setNumColumns(int)方法以编程方式设置gridview的列数。Gridview的工作方式与ListView相同,只是有专栏支持。谢谢,我实际上无意中找到了答案。只需要将'final'添加到在onClickListener函数外部声明的变量中。这样,我就能够在函数中引用适配器。
button1.setOnClickListener(new View.OnClickListener() {
myAdapter adapter1;
public void onClick(View v) {
// how do I change "View row = inflater.inflate(R.layout.grid_row, parent, false);"?
}
});