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

how does the position work in the getView in the adapter?

据我所知,位置 returns 是从整个列表中选择的特定项目。那么适配器如何使用位置并在没有某种循环的情况下传输所有项目呢?我想在我看来关于列表和位置存在一个基本错误。 这是代码:

(提前致谢):

 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;
    }

好的,这件事困扰了我一段时间。因此,当创建视图时,您可以看到一定数量的行。从视图中的第一行到最后一行,适配器正在计数。当您向下滚动时,计数器会重置,或者,我会说,它会重新开始。因此,假设创建视图时屏幕上有 10 行。当你向下滚动时,如果你 select 检查第 5 行,它会在第一个视图中 select ,当你滚动时,它会显示其他元素也被检查。我试图找到解决方案,但找不到。

So how does the adapter use the position and transfers all of the items without some kind of loop?

简而言之,不是。这正是发生的事情。

Android 框架将创建列表的过程分成几个不同的部分。我们在这里关心的是 ListViewAdapter

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

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);
}

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