2012-04-02 98 views
2

我有需要在Android ListView上显示的WS数据。 数据可以是不同的类型,所以我需要动态创建一个ListView项目的布局,我该怎么做?我认为我必须使用LayoutInflater,但一直使用它与现有的布局,从未从头开始创建布局。我该怎么做?以编程方式在Android中创建列表视图项目

回答

2

您需要创建为

适配器只是检查这个环节就阐述所有关于使用适配器。在给定的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是你的每一行 的布局中,你可以定义你的图像浏览,文字浏览

+0

vogella网站有很棒的教程,但无法找到一个从头开始创建布局的示例,其中添加了视图。我看到的所有例子都使用了预先存在的xml布局。我想避免这种情况。 – Cris 2012-04-02 12:53:15

+0

好吧,那你为什么不尝试通过新对象创建它们作为ListView list = new ListView(context)); – vipin 2012-04-02 12:54:53

+0

克里斯解决方案为你工作吗? – vipin 2012-04-02 13:21:23

1

正如你所说的你使用不同的数据类型,我假设你想显示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)。

相关问题