以编程方式在Android中创建列表视图项目
我有需要在Android ListView上显示的WS数据。 数据可以是不同的类型,所以我需要动态创建一个ListView项目的布局,我该怎么做?我认为我必须使用LayoutInflater,但一直使用它与现有的布局,从未从头开始创建布局。我该怎么做?以编程方式在Android中创建列表视图项目
您需要创建为
适配器只是检查这个环节就阐述所有关于使用适配器。在给定的URL
http://www.vogella.de/articles/AndroidListView/article.html
//编辑
只是检查这个代码
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MySimpleArrayAdapter(Context context, String[] values) {
super(context, R.layout.rowlayout, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// Change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
}
其中R.layout.rowlayout是你的每一行 的布局中,你可以定义你的图像浏览,文字浏览
正如你所说的你使用不同的数据类型,我假设你想显示differen每个数据类型的布局。没有必要动态创建你的listview-items;如果你愿意,你可以从XML中膨胀它们。
创建自定义列表适配器(请参阅vipin提供的vogella链接)并覆盖getView()
,getItemViewType()
和getViewTypeCount()
方法。
在getView()
中,您可以通过编程方式构建您的视图,也可以通过XML将它们膨胀。要确定要膨胀(或构建)哪个布局,请致电getItemViewType(position)
,检查它返回的值,然后选择要为该值膨胀的布局。有关如何构建XML布局的更多信息,请参见this page in the dev guide on XML layouts。
接下来,看看this answer并将其实现到您的适配器中。一定要阅读评论。例如,覆盖getItemViewType()
的东西,如:
public int getItemViewType(int position) {
if(getItem(position) instanceOf ItemA) {
return 0;
} else {
return 1;
}
}
这种方法允许你的ListView回收视图,并使用ViewHolder模式(有关详细信息,再次看到提供的链接VIPIN)。
vogella网站有很棒的教程,但无法找到一个从头开始创建布局的示例,其中添加了视图。我看到的所有例子都使用了预先存在的xml布局。我想避免这种情况。 – Cris 2012-04-02 12:53:15
好吧,那你为什么不尝试通过新对象创建它们作为ListView list = new ListView(context)); – vipin 2012-04-02 12:54:53
克里斯解决方案为你工作吗? – vipin 2012-04-02 13:21:23