该位置如何在适配器中的getView中工作?

时间:2015-09-08 17:16:40

标签: android android-listview position

据我所知,该职位从整个清单中返回特定的选定项目。那么适配器如何使用位置并传输所有项目而没有某种循环?我想我的视线中有关于名单和职位的基本错误。 这是代码:

(谢谢你提前):

 public View getView(int position, View convertView, ViewGroup parent) {
        viewHolder holder;

if (convertView==null){

    convertView= LayoutInflater.from(mContext).inflate(R.layout.customupdatestatus, null);
    holder=new viewHolder();
    holder.statusHomePage=(TextView)convertView.findViewById(R.id.statusUploaded);
    holder.userNameHomePage=(TextView)convertView.findViewById(R.id.userNameUpdate);

    convertView.setTag(holder);
}else{
    holder=(viewHolder) convertView.getTag();
}
        ParseObject statusObject= mStatus.get(position);

String username= statusObject.getString("userName");
        holder.userNameHomePage.setText(username);

        String status=statusObject.getString("newStatus");
        holder.statusHomePage.setText(status);

        return convertView;
    }

2 个答案:

答案 0 :(得分:0)

好的,这是困扰我一段时间的事情。因此,在创建视图时,您可以看到一定数量的行。从视图中的第一行到最后一行,适配器正在计数。向下滚动时,计数器会重置,或者,我会说,它会再次启动。因此,假设您在创建视图时屏幕上有10行。向下滚动时,如果选择检查第5行,它将在第一个视图中选择,当您滚动时,它将显示另一个元素也被选中。我试图找到解决方案,但无法解决。

答案 1 :(得分:0)

  

那么适配器如何使用该位置并在没有某种循环的情况下传输所有项目?

简而言之,它没有。这正是发生的事情。

Android框架将创建列表的过程分为几个不同的部分。我们关注的是ListViewAdapter

ListView的工作是询问适配器如何将位置映射到View,然后使用该信息正确布局,测量和绘制View个。

Adapter的工作是告诉ListView如何将列表中的位置映射到View实例。因为Android框架负责在ListView中为您循环遍历项目,所以您不必担心自己这样做 - 您只需要提供映射。

以下是ListView所做的一般概念:

// Figure out how many children we have
int numChildren = adapter.getCount();

for (int i = 0; i < numChildren; i++) {
    // Get the view for this position
    View childView = adapter.getView(i, null, this);

    // Add it to ourselves
    addView(childView);
}

这当然是高度简化的,但对于适配器在幕后发生的事情是一个很好的高级概念。