gpt4 book ai didi

android - 根据奇怪的计数显示 ListView TextView

转载 作者:搜寻专家 更新时间:2023-11-01 07:37:42 26 4
gpt4 key购买 nike

我有一个 ListView,它使用自定义适配器填充了项目集合。集合的属性之一是计数,我的 ListView 布局中有两个 TextView,一个用于文本,一个用于计数。如果计数为零,我不想显示计数 TextView。当最初加载 ListView 时,我的代码工作正常,但是当我滚动 ListView 时,计数将显示在随机行上,并且如果向上和向下滚动 ListView 会不断变化。这是我的代码:

    public class Main extends ListActivity
{
private static CustomAdapter adapter = null;


@Override
public void onCreate(Bundle icicle)
{
List<Item> items = new ArrayList<Item>();
items = GetItems();
adapter = new CustomAdapter();

for (Item item : items)
adapter.addItem(item);

this.setListAdapter(adapter);

adapter.notifyDataSetChanged();
}

/* ADAPTER */
private class CustomAdapter extends BaseAdapter
{
private final List<Item> mData = new ArrayList<Item>();
private final LayoutInflater mInflater;
public CustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public void addItem(Item item) {
mData.add(item);
}

@Override
public int getCount() {
return mData.size();
}

@Override
public Object getItem(int position) {
return mData.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final ViewHolder holder;
final Item item = (Item)this.getItem(position);

if (convertView == null)
{
holder = new ViewHolder();

convertView = mInflater.inflate(R.layout.main, parent, false);

holder.text = (TextView)convertView.findViewById(R.id.text);
holder.count = (TextView)convertView.findViewById(R.id.count);

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

holder.text.setText(item.getTitle());

if (item.getCount() > 0)
holder.count.setText(item.getCount().ToString());
else
holder.count.setVisibility(View.INVISIBLE);


return(convertView);
}
}

static class ViewHolder {
TextView text, count
}

布局:

<TextView 
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
/>

<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"

/>

编辑:

我能够通过一个 hacky 解决方法让它工作。似乎将 TextView 的可见性设置为 Invisible 或 Gone 导致了这个问题,所以我只是将计数为零的项目的颜色更改为背景色:

            if (item.getCount() > 0)
holder.count.setText(item.getCount().ToString());
else
holder.count.setTextColor(Color.WHITE);

如果有人有真正的解决方法,请告诉我。

最佳答案

你应该这样做:

if (item.getCount() > 0) {
holder.count.setText(item.getCount().ToString());
holder.count.setVisibility(View.VISIBLE);
}
else
holder.count.setVisibility(View.INVISIBLE);

因为您使用了 ViewHolder,所以您需要考虑这样一个事实,即您可能会得到一个未显示 count 的旧 View。这意味着我们需要确保将 count 的可见性设置为 VISIBLE。同样,如果计数为零,我们想隐藏它 - 所以我们改变可见性,即使我们可能得到一个完全不可见的 View

关于android - 根据奇怪的计数显示 ListView TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com