1

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

Textview2 是默认隐藏(可见性=消失)。

现在我设置该文本视图的可见性仅在列表视图的第五个位置可见。我为此编写了代码,但 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;
}
4

2 回答 2

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;

}
于 2012-09-17T17:10:17.227 回答
0

如果您的 convertView 不为空,则 if-else 条件不会触发,因此当 convertView 为空时,它会触发,因此它会随机工作。

按以下方式更新您的代码...

   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;

    }

}
于 2012-09-17T17:18:54.850 回答