我刚刚开始学习android,我正处于我想要解决下面描述的问题但我不确定如何开始。
我有一个包含以下数据的数据数组
1, text1, image1.png
2, text2, image2.png
3, text3, null
4, null, image3.png
我知道如何在一些教程之后使用ArrayAdapter创建一个ListView以及它们的xml布局。
正如您在上面的数组中看到的,有时它不包含图像,有时它不包含文本,有时它同时包含文本。
我的问题是如何使布局工作,以便它根据数组值动态更改?
换句话说,我怎样才能开始考虑构建listview + ArrayAdapter + layout,我只能在数组记录只有图像的情况下查看图像,在只有文本时查看文本视图,在查看时查看两者两者都可用。
指向教程的链接非常有用
答案 0 :(得分:1)
您可以创建一个表示一个数组元素的 MyCustomType 类型(在您的情况下,它包含数字,文本和图像)。此外,您需要实现自定义数组适配器。此适配器使用MyCustomType的ArrayList。
public class CustomAdapter extends ArrayAdapter<MyCustomType> {
//...
private ArrayList<MyCustomType> foo;
public CustomAdapter(Context context, Activity bar, ArrayList<MyCustomType> foo) {
super(bar, R.layout.row, foo);
this.foo = foo;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
覆盖 getViewTypeCount()以确定您拥有多少种不同的行。 getItemViewType 返回必须显示的行类型。
你的getView方法可能类似于他的方法:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
int type = getItemViewType(position); // decide what row type has to be displayed
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, parent, false);
viewHolder = new ViewHolder();
viewHolder.number = //...
viewHolder.text = //...
viewHolder.image = //...
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag(); // avoided to call findViewById
}
switch(type) {
case TYPE1:
//... you could just change the visibility of the corresponding view
break;
case TYPE 2:
// ...
break;
}
return convertView;
}
答案 1 :(得分:0)