如何创建动态列表视图并设置Textview的可见性

时间:2012-09-17 17:02:49

标签: android

我是Android开发的新手。我成功创建了一个带有动态列表视图的演示项目,但现在我的问题是我的list_row xml文件中有两个textview。

Textview2是默认隐藏(Visibility = Gone)。

现在我将该textview的可见性设置为仅在listview中的第五个位置可见。我为此编写了代码,但textview随机显示,而不仅仅是在第五个位置。我在列表视图中有100条记录。

我做错了什么?

编辑:

public View getView(int position, View convertView, ViewGroup parent) 
{
    // TODO Auto-generated method stub
    ViewHolder holder;

    if (convertView == null) 
    {
        convertView = mLayoutInflater.inflate(R.layout.list_row, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.mytext);
        holder.text2 = (TextView) convertView.findViewById(R.id.invisibletext);
        convertView.setTag(holder);
        if (position == 5) 
            holder.text2.setVisibility(View.VISIBLE);
        else
            holder.text2.setVisibility(View.GONE);
    } 
    else 
    {
        holder = (ViewHolder) convertView.getTag();
    }

    return convertView;
}

static class ViewHolder 
{
    TextView text1;
    TextView text2;
}

2 个答案:

答案 0 :(得分:0)

问题是适配器中的convertViews被回收。

我假设您正在测试适配器中getView()函数的位置。修改您的代码,使其执行以下操作:

if (position == 4)
    convertView.setVisibility(View.INVISIBLE);
else 
    convertView.setVisibility(View.VISIBLE);

这将强制convertView在第5个位置设置为可见后重新出现

编辑: if else条件是在错误的地方

 public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;

    if (convertView == null) {
        convertView = mLayoutInflater.inflate(R.layout.list_row, null);

        holder = new ViewHolder();

        holder.text1 = (TextView) convertView.findViewById(R.id.mytext);

        holder.text2 = (TextView) convertView

        .findViewById(R.id.invisibletext);

        convertView.setTag(holder);


    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    if (position == 5) {
        holder.text2.setVisibility(View.INVISIBLE);
    } else {
        holder.text2.setVisibility(View.VISIBLE);
    }

    return convertView;

}

}

static class ViewHolder {
TextView text1;

TextView text2;

}

答案 1 :(得分:0)

如果你的convertView不是null,那么if-else条件不会触发,所以当convertView为null然后它的火,所以它随机工作。

根据以下内容更新您的代码......

   public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;

        if (convertView == null) {
            convertView = mLayoutInflater.inflate(R.layout.list_row, null);

            holder = new ViewHolder();

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


      holder.text1 = (TextView) convertView.findViewById(R.id.mytext);
      holder.text2 = (TextView) convertView.findViewById(R.id.invisibletext);

      if (position == 5) {
                holder.text2.setVisibility(View.VISIBLE);

            } else {
                holder.text2.setVisibility(View.GONE);
            }

        return convertView;

    }

}