listview为不同的元素/项目

时间:2014-03-25 11:04:23

标签: android listview

我试图在第一行中实现一个ListView图像,而在其余项目上标题,但它不起作用。对此有何解决方案?

这是我的代码

private class CustomListAdapter extends ArrayAdapter { 
private Context c;
String titles[];

public CustomListAdapter(Context context, String titles[]) {
super(context,R.id.textView1);
this.c = context;
this.titles=titles;
//   this.imagedrawer=imagedrawer;
}   


public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    LayoutInflater inflater = null;

if(position==0)
{
inflater= (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
View v=inflater.inflate(R.layout.profileimage,parent,false);
ImageView drawerprofile=(ImageView) findViewById(R.id.imageViewdrawer);
drawerprofile.setImageResource(R.drawable.camera);
}
else
{
inflater= (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
View v=inflater.inflate(R.layout.listviewitems,parent,false);
TextView tv1=(TextView) findViewById(R.id.textView1);
tv1.setText(titles[position]);
}


return view;  
}`

4 个答案:

答案 0 :(得分:0)

你在适配器类中不使用视图

 @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);

ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
imageView.setImageResource(R.drawable.phote);

return rowView;
}

答案 1 :(得分:0)

使用此功能。

if (position % 2 == 1) {
 inflater= (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
 View v=inflater.inflate(R.layout.profileimage,parent,false);
 ImageView drawerprofile=(ImageView) findViewById(R.id.imageViewdrawer);
 drawerprofile.setImageResource(R.drawable.camera);

 } else {

 inflater= (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
 View v=inflater.inflate(R.layout.listviewitems,parent,false);
 TextView tv1=(TextView) findViewById(R.id.textView1);
 tv1.setText(titles[position]);

 }

答案 2 :(得分:0)

ListView有一个标题。您可以在Header和TextView中添加其他元素。

您需要重复使用这些视图。首先检查converView是否为空,只有在它为空时才膨胀。

答案 3 :(得分:0)

您没有返回正确的视图。您正在对v变量中的每个View进行充气,但随后您将返回视图。

所以替换:

View v=inflater.inflate(R.layout.listviewitems,parent,false);

通过

view=inflater.inflate(R.layout.listviewitems,parent,false);

此外,您必须在膨胀的视图中找到视图而不是活动/片段视图。我的意思是用这个:

ImageView drawerprofile=(ImageView) view.findViewById(R.id.imageViewdrawer);

而不是:

ImageView drawerprofile=(ImageView) findViewById(R.id.imageViewdrawer);

但是这里的最佳做法是为ListView使用Header ,在这个标题中你可以放置你的ImageView,其余的行将在getView方法中返回。此外,您必须在此链接中使用ViewHolder模式,您可以看到如何实现它:ViewHolder pattern