java - 在 ListView 上滚动会创建重复的元数据项

标签 java android arrays

我正在使用从 JSON 数组获取的数据填充 ListView 。当我在 ListView 上滚动时,我获取的元数据会被复制。

        public View getView(int pos, View convertView, ViewGroup parent) {
        View tv;
        TextView t;


        if (convertView == null)
            tv = m_inflater.inflate (R.layout.item, parent, false);
          else
            tv = convertView;

        try {
            t = (TextView) tv.findViewById(R.id.text);
            JSONObject obj = _results.getJSONObject(pos);

            t.setText (obj.getString("title").replaceAll("\\<.*?\\>", ""));

            t = (TextView) tv.findViewById(R.id.created_at);

            JSONObject meta = obj.getJSONObject("meta");

            t.setText (t.getText() + "\n"+ "When:" + "\t"+meta.getString("startDate")+"\n"+"Location:" +"\t" +meta.getString("location")+"\n" +"More Info:"+"\t" +meta.getString("eventURL")+"\n");




        } catch (JSONException e) {

            Log.e("alatta", e.getMessage());
        }
        return tv;
      }

最佳答案

而不是

t.setText (t.getText() + "\n"+ "When:" + "\t"+meta.getString( ...

试试这个:

t.setText("When:" + "\t"+meta.getString( ...)

这是因为 ListView 重用列表项对象 (View ConvertView),因此在滚动时您会得到一个已使用的 tv 并且其 View 已填充了一些值。

关于java - 在 ListView 上滚动会创建重复的元数据项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11235263/

相关文章:

java - 当通过按钮将 SystemClock.elapsedRealtime 显示到 TextView 中时,我得到一个非常大的值

php - foreach 和 while 循环使用数组来复制数据

java - 在 Android 中共享联系人

java - 如何解决java.util.NoSuchElementException?

java - Android - 禁用启动屏幕上的声音

java - 莫基托 : given an instance of Class return the same instance

java - GridView 试图从边界外获取 ArrayList 数据

android - 在Android Studio中安装ActionBarSherlock 4.4

Java:在不指定数组大小的情况下声明多维数组(例如,new int[10][])

php - 动态创建一个用 N 个空元素初始化的数组