ListView的所有项目的常量ID使OnClick方法无效

时间:2010-02-01 13:35:49

标签: android listview

我对android很新,我在管理listviews方面遇到了一些麻烦...... 我正在生成一个ListView,但其中的所有项目具有相同的ID,所以当我点击它们中的任何一个时,它们都会做同样的事情(这当然不是我期望的......)

我正在从XML URL加载数据,使用SAX解析器解析它们。 这是我的适配器。我的“听”包含6行,由“&&&&”分隔的2个字符串。 然后我用:

显示列表视图
  zadapter.notifyDataSetChanged();
   setListAdapter(this.zadapter);

来源


class InfoAdapter extends ArrayAdapter<String> {
  private ArrayList<String> items;
  public InfoAdapter(Context context, int textViewResourceId, ArrayList<String> items) {
   super(context, textViewResourceId, items);
   this.items = items;
  }

  public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   if (v == null) {
    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.row, null);
   }
   String liste = items.get(position);
   String[] info = liste.split("&&&");
   if (liste != null) {
    TextView tt = (TextView) v.findViewById(R.id.toptext);
    TextView bt = (TextView) v.findViewById(R.id.bottomtext);
    if (tt != null) {
     tt.setText(info[0]);
    }
    if(bt != null){
     bt.setText(info[1]);
    }
    Log.e(MY_DEBUG_TAG, "Debug position text"+tt.getId());
   }
   Log.e(MY_DEBUG_TAG, "Debug position view"+v.getId());
   return v;
  }
 }

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以请求列表视图查看所选项目的索引,并将其与listadapter结合使用,以确定视图的实际数据。

答案 1 :(得分:0)

我认为您可能希望从BaseAdapter扩展(不需要更多工作),因为ArrayAdapter<T>的内部对象列表对您的子类是隐藏的,因此您的覆盖方法正在使用一个完全不同的对象列表。

有关详细信息,请参阅ArrayAdapter source,尤其是private List<T> mObjects位。

答案 2 :(得分:0)

在你的调试语句中,你拥有视图的id,这是一个标识符,我认为你想要的是索引。

要触发取决于所选项目的操作, 您必须使用ListView中的setOnItemClickListener方法并实现OnItemClickListener接口。

方法 public void onItemClick(AdapterView<?> list, View v, int pos, long id) 是你需要的。请参阅方法here

的说明