【问题标题】:ListView items repeat in BaseAdapterListView 项目在 BaseAdapter 中重复
【发布时间】:2015-06-19 03:12:02
【问题描述】:

我正在提取数据并将其加载到我的列表视图的 BaseAdapter 中。目前,列表视图中的项目与最后添加的项目相同,因此列表如下所示:

Item 3
Item 3
Item 3

代替:

Item 1
Item 2
Item 3

我检查了数据源,每次从源加载的数据都是唯一的。我认为我的 BaseAdapter 有问题,但我不确定它是什么。这是我的 BaseAdapter:

BaseAdapter.java

ArrayList<ThreadListData> myList = new ArrayList<>();
LayoutInflater inflater;
Context context;

public ThreadBaseAdapter(Context context, ArrayList<ThreadListData> myList) {
    this.context = context;
    inflater = LayoutInflater.from(this.context);
    this.myList = myList;
}

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

@Override
public ThreadListData getItem(int position) {
    return myList.get(position);
}

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

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

    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(this.context);
        convertView = inflater.inflate(R.layout.listitem_newthread, parent, false);

    }

    ThreadListData listData = getItem(position);

    TextView name = (TextView)convertView.findViewById(R.id.name_newthread);
    TextView username = (TextView)convertView.findViewById(R.id.username_newthread);

    name.setText(listData.getName());
    username.setText(listData.getName());

    ParseImageView profile = (ParseImageView)convertView.findViewById(R.id.profilepicture);

    BitmapTask task = new BitmapTask(listData.getImage());

    task.execute(profile);

    return convertView;
}

我将从我的 BaseAdapter 开始,如果需要,可以显示更多代码。感谢所有帮助!

【问题讨论】:

    标签: android listview baseadapter


    【解决方案1】:

    您错过了返回position

    修改你的getItemId

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

    【讨论】:

      【解决方案2】:

      你需要改变两件事:

      1.您返回错误的项目位置

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

      应该是

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

      2。您声明了一个 LayoutInflater 并在构造函数中创建新实例。但是在 getView() 中,您创建了另一个 LayoutInflater。查看下面的更新代码

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
      
          if (convertView == null) {
              // LayoutInflater inflater = LayoutInflater.from(this.context);
                 inflater = LayoutInflater.from(this.context);
              convertView = inflater.inflate(R.layout.listitem_newthread, parent, false);
      
          }
      
          ThreadListData listData = getItem(position);
      
          TextView name = (TextView)convertView.findViewById(R.id.name_newthread);
          TextView username = (TextView)convertView.findViewById(R.id.username_newthread);
      
          name.setText(listData.getName());
          username.setText(listData.getName());
      
          ParseImageView profile = (ParseImageView)convertView.findViewById(R.id.profilepicture);
      
          BitmapTask task = new BitmapTask(listData.getImage());
      
          task.execute(profile);
      
          return convertView;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        相关资源
        最近更新 更多