2011-10-11 52 views
0

我有一个使用简单适配器的列表视图。基本上每个元素由一个图像,一个字符串字段和一个评分栏组成。如何根据一个条件修改列表视图的元素

ListView控件元素的布局是在文件element.xml 而不是列表视图里面的main.xml

串字段的值可以是数字,免费的字,或安装Word。

正好接近这个领域的element.xml布局存在与ID =价格和文本值=“应用程序的价格”标签

这就是我现在得到时,我显示我的列表: “应用价格” 4 ‘应用程序的价格’FREE ‘应用程序的价格’7 ‘申请价’已安装 ‘应用程序的价格’FREE

基本上我想要做的是检查它是否在字符串字段和值等于INSTALLEd标签价格必须变成不可见才能得到这个结果:

“应用程序的价格” 4 “应用程序的价格” FREE “应用程序的价格” 7 INSTALLED “应用程序的价格” FREE

你知道该怎么做......我红认为可能是正确的扩展我的简单适配器的方法getview,但我不知道如何.....它不是我清楚这种方法如何工作,他的参数代表.....你能帮我或建议我做正确的事情?

public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View view = super.getView(position, convertView, parent); 


     TextView costo = (TextView) view.findViewById(R.id.costo); 
     TextView prezzo = (TextView) view.findViewById(R.id.appPrezzo); 
     if (prezzo.getText().equals("Installed")) 
     { 
      costo.setVisibility(View.INVISIBLE); 
      //view = inflater.inflate(R.layout.elem_applist, null); 

     } 
     else 
     { 
      costo.setVisibility(View.VISIBLE); 
     } 

     return view; 

我做了这样......我不知道为什么我can'y评论或投票支持你的答案Blessemn .....反正它的工作原理,但我没有使用充气器....希望是正确的也没有它:)

回答

1

在getview方法被调用来返回表示每行的图。即使您滚动列表,也称为多次。你得到的参数

位置 - >行号。 convertview - >代表行的视图。在开始它的空。但一旦呈现 它不会为空。 parent - >父视图

在getview方法中,您必须返回一个视图来表示该行。

继承人如何正常getView方法看起来像

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = mInflater.inflate(R.layout.analytics_row, null); 
    TextView mNae = (TextView)convertView.findViewById(R.id.analytic_name); 

    if(data.get(position).mystring == ""){ 
     mNae.setText("YES"); 
    } else { 
     mNae.setText("No"); 
    }  
    return convertView; 
} 

这里我们使用充气只是得到一个视图,找到视图内TextView的。 我们检查一个条件并相应地设置文本并返回视图。

有更好的教程在那里。您应该搜索自定义基础适配器。

如果它适用于您,那么使用它就没有问题。只要你返回一个有效的视图,这个列表就可以工作。 Inflater仅用于从xml文件创建视图。

但请注意帕瑞斯的答案。正如你所看到的,他使用静态类来保存对内部子行的引用。当列表第一次呈现时,getview方法仅被称为n次,其中n是当前可见行的数量(不是确切的)。假设5行一次都可见,则适配器重用现有视图并更新其中的值。

所以在他的代码,他检查了convertview为空,如果是他膨胀新行,否则他使用与更新值的现有行。我建议如果你看看我编辑上面的代码.....它的工作原理也没有它,你看从Google IO

+0

我做了这个视频,而无需充气,但我不知道它是否真的正确....你能告诉我有什么不同吗? – Sgotenks

+0

只要您返回视图,它就会工作。但我真的不认为它的效率。我已经更新了我的回答。 – blessenm

1

请尝试下面的代码来定义自定义列表视图。 例如:

public static class ViewHolder 
    { 
     ImageView imgViewLogo; 
     TextView txtViewTitle; 
     TextView txtViewDescription; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     ViewHolder holder; 
     if(convertView==null) 
     { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.items, null); 

      holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
      holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); 
      holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); 

      convertView.setTag(holder); 
     } 
     else 
      holder=(ViewHolder)convertView.getTag(); 

     ItemBean bean = (ItemBean) itemList.get(position); 

     holder.imgViewLogo.setImageResource(bean.getImage()); 
     holder.txtViewTitle.setText(bean.getTitle()); 
     holder.txtViewDescription.setText(bean.getDescription()); 

     return convertView; 
    }