Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有不同布局的Android ListView(网格和列表)_Android_Listview_Android Arrayadapter_Onclicklistener_Android Adapter - Fatal编程技术网

具有不同布局的Android ListView(网格和列表)

具有不同布局的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

我有一个带有自定义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'


设置:

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);"?
    }
});