我是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;
}
答案 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;
}
}