如何在android中查看listview中的项目?

Kal*_*mah 12 java android android-layout android-listview

是否可以根据其在适配器中的位置而不是ListView中的可见视图来获取项目视图?

我知道getChildAt()和getItemIdAtPosition()等函数,但是它们基于ListView中的可见视图提供信息.我也知道Android回收了视图,这意味着我只能使用ListView中的可见视图.

我的目标是为每个项目设置一个通用标识符,因为我使用的是CursorAdapter,因此我不必计算项目相对于可见项目的位置.

Mar*_*nto 8

这就是我如何实现这一目标的.在我的(自定义)适配器类中:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view = null;
  if (convertView == null) {
    LayoutInflater inflater = context.getLayoutInflater();
    view = inflater.inflate(textViewResourceId, parent, false);
    final ViewHolder viewHolder = new ViewHolder();
    viewHolder.name = (TextView) view.findViewById(R.id.name);
    viewHolder.button = (ImageButton) view.findViewById(R.id.button);

    viewHolder.button.setOnClickListener
      (new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        int position = (int) viewHolder.button.getTag();
        Log.d(TAG, "Position is: " +position);
      }
    });

    view.setTag(viewHolder);
    viewHolder.button.setTag(items.get(position));

  } else {
    view = convertView;
    ((ViewHolder) view.getTag()).button.setTag(items.get(position));
  }


  ViewHolder holder = (ViewHolder) view.getTag();

  return view;
}
Run Code Online (Sandbox Code Playgroud)

本质上,诀窍是通过setTaggetTag方法设置和检索位置索引.该items变量是指ArrayList包含我的自定义(适配器)的对象.

另请参阅教程以获取深入的示例.如果您需要我澄清任何事情,请告诉我.


Raj*_*Dua 1

更好的选择是使用 CursorAdapter 返回的数据而不是可见视图进行识别。例如,如果您的数据位于 Array 中,则每个数据项都有一个唯一的索引。