【问题标题】:Unwanted occasional empty item appearing in ListViewListView 中偶尔出现不需要的空项目
【发布时间】:2014-11-13 20:00:18
【问题描述】:

我有一个 ListView,其中每一行都是一个 TextView,并显示一行文本。我遇到了一个问题,有时会出现不需要的空行。一旦列表滚动经过该特定区域,空行就会消失。

在调试器中暂停应用程序后,我使用以下代码验证了我的列表行包含正确的信息。输出中没有任何内容显示为空或 null 等。

for (int i = 0; i<list.getChildCount(); i++) { 

     System.out.print((TextView) list.getChildAt(i)).getText());
}

这显示了我预期的信息。

我还检查了支持我的适配器的数据是否有空条目、新行等。

我在Adapter里面的getView()方法如下:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView t;

        if (convertView == null) {
            convertView = mInflator.inflate(R.layout.single_message_row, null);
            t = (TextView) convertView;
            t.setMovementMethod(LinkMovementMethod.getInstance());
            t.setTextSize(mMsgSize);
        }

        else {
            t = (TextView) convertView;
        }

        CharSequence text = get(position);
        t.setText(text);

        return t;
    }

下面是展示问题的图片(红色区域):

【问题讨论】:

  • 你确定那里没有任何换行符吗?如 texttext\n\n\n\n\n .. 这会导致您的问题.. 您的适配器看起来不错
  • 你为什么不直接打电话给text.toString().trim()
  • dymmeh:是的,我确定。消息来自服务器,我明确避免将 \n 添加到末尾,因为没有必要。 Waqas:因为这样做会删除文本颜色

标签: android listview empty-list


【解决方案1】:

将getView方法改成如下试试:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
 if(row==null){
  LayoutInflater inflater=getLayoutInflater();
  row=inflater.inflate(R.layout.single_message_row, parent, false);

 }
  TextView t=(TextView)row.findViewById(R.id.yourtextview);
   t.setText("position "+position);
   t.setMovementMethod(LinkMovementMethod.getInstance());
   t.setTextSize(mMsgSize);

   CharSequence text = get(position);
   t.setText(text);


        return row;
}

【讨论】:

  • 介意解释一下你在这里做什么?我在这里看不到任何可以解决他的问题的东西。
  • 我认为是这条线row=inflater.inflate(R.layout.single_message_row, parent, false);
  • 我将尝试此更改并报告。只需注意一件事 - 我的 single_message_row.xml 文件仅包含一个 textview,因此无需执行 findViewById 并转换为 TextView。
  • 恐怕这行不通,我还检查了支持我的适配器的数据是否有空条目和新行,所有数据都符合预期。
  • @Al. : 感谢您的回复,如果您有任何其他问题,我将删除它。
【解决方案2】:

似乎问题是由于在 ListView 中使用 match_parent 作为我的 TextView 宽度引起的。将其更改为wrap_content 似乎已修复它。

【讨论】:

    【解决方案3】:

    对于ListView 中出现的不需要的空列表项,我尝试了这个:

             List<String> listofItems;
             String strlist=listofItems.get(position);
    
             if(strlist.isEmpty())
            {
                remove(strlist);
            }
    

    'position' 是我在 View getView 方法中作为参数得到的,因为我正在实现一个自定义适配器。 对我来说效果很好!

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2015-02-17
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      相关资源
      最近更新 更多