ListView的OnClickListener,每个onItemClick都有来自ArrayList的新Intent数据

时间:2014-12-19 19:39:59

标签: java android listview arraylist onclicklistener

我为每个项目设置了一个带有onClickListener的ListView。这是在AsyncTask中的onPostExecute()函数中设置的;列表视图中的每个项目都应启动一个活动,该活动可查看在intent中设置的数据。数据来自任意长度的ArrayList。 ListView中的所有项目仅启动ArrayList中的最后一项。

listViewAdapter = new ListViewAdapter(RegisterActivity.this, userNames, reporNames);
              localListView.setAdapter(listViewAdapter);

              for(final Object s : objects){

                      localListView.setOnItemClickListener(new OnItemClickListener() {
                          @Override
                          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                              final Intent localIntent = new Intent(RegisterActivity.this, ViewObjectActivity.class);
                              localIntent.putExtra("id", s.getId());
                              localIntent.putExtra("permission", s.getPermission());
                              localIntent.putExtra("lattitude", s.getLattitude());
                              localIntent.putExtra("longitude", s.getLongitude());
                              startActivityForResult(localIntent, VIEW_SIT_REP_REQUEST);
                          }
                      });                     
              }

listViewAdapter非常简单。它是BaseAdapter的扩展。

当它是线性布局中的按钮时,我有这个工作,它是一个OnTouchListener。不知道我改变了什么来打破它,但现在已经工作了3个小时。有什么建议?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您无需将多个OnItemClickListeners附加到ListView,因为单个OnItemClickListener适用于所有项目。只需使用position参数从集合中引用正确的对象:

localListView.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
              final Intent localIntent = new Intent(RegisterActivity.this, ViewObjectActivity.class);
              localIntent.putExtra("id", objects[position].getId());
              localIntent.putExtra("permission", objects[position].getPermission());
              localIntent.putExtra("lattitude", objects[position].getLattitude());
              localIntent.putExtra("longitude", objects[position].getLongitude());
              startActivityForResult(localIntent, VIEW_SIT_REP_REQUEST);
          }
});

答案 1 :(得分:0)

您的listview项目布局行中可能有一些按钮。 因为你正在写作,当它是一个线性布局的按钮时,我就有了这个工作。

行中的按钮正在窃取焦点,onItmeClick无法正常工作。

您可以使行布局中的按钮无法聚焦 android.focusable =&#34; false&#34; ,这可以修复onItemClick未被调用的问题