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

时间:2013-09-05 20:05:24

标签: android listview android-arrayadapter onclicklistener android-adapter

我有一个带有自定义ArrayAdapter和2个自定义布局的ListView。

列表视图(1 x X)'single_row.xml' 网格视图(3 x X)'grid_row.xml'

我有两个RadioButton,在RadioGroup内,ID为'button1'& 'BUTTON2'。

理想情况下,我希望我的ListView默认为'single_row.xml',并将onClickListeners设置为两个RadioButtons。

伪代码:

如果单击button1,则适配器布局='single_row.xml' 如果单击button2,则适配器布局='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;     
}
}

编辑:有针对性的问题 - 我似乎无法拉入myAdapter变量。甚至通过myAdapter adapter1;

在类中全局声明它
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);"?
    }
});

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要做的是使用视图类型(Tutorial)并根据Radio buttton设置类型。

然而,由于你的适配器当前正在工作,你会遇到一个问题,你需要有一个对象(而不是String)支持你的适配器,以便当单选按钮被更改时它将设置它在那个对象上以及稍后当你的视图被回收时(阅读here)你就不会失去那个状态。

所以在你的情况下,一旦你得到了视图类型,你就会想要根据保存的单选按钮状态进行视图类型,那么当获取视图被调用时你会膨胀该视图,你也会必须刷新单选按钮更改的视图。