java - ListView 的 OnClickListener,为每个 onItemClick 提供来自 ArrayList 的新 Intent 数据

标签 java android listview arraylist onclicklistener

我正在为每个项目设置一个带有 onClickListener 的 ListView。这是在 AsyncTask 的 onPostExecute() 函数中设置的; ListView 中的每个项目都应该启动一个 Activity 来查看 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 个小时。有什么建议么?提前致谢。

最佳答案

您不需要将多个 OnItemClickListener 附加到 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);
          }
});

关于java - ListView 的 OnClickListener,为每个 onItemClick 提供来自 ArrayList 的新 Intent 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572836/

相关文章:

Java : Is it possible to deserialize objects without reflection

java - Java 的 JIT 编译器运行速度有多快?

java - DataSnapshot.getValue 无法解析类型 T

android - 无法在 MacBook M1 芯片上构建 Kotlin Multiplatform 移动项目

java - 如何将图像标题添加到我的抽屉导航布局中

java - playframework如何分配请求 Action 、反射?

java - 调用Bean属性中的方法

c# - 在 ListView 项目上滑动 - WP8.1

android - 如何在 Android 的 ListView 中打印一个值?

c# - 如何删除 WPF 中 ListView 中显示的特定文本?