Android 如何在listview的列表项中的图像视图上设置单击侦听器

Android 如何在listview的列表项中的图像视图上设置单击侦听器,android,listview,custom-adapter,Android,Listview,Custom Adapter,我正在实现一个在listview中使用的自定义适配器。我正在用一些文本消息和我的一个对象类填充listview。每个列表项中都有一个imageview,单击该imageview我将显示一个包含对象信息的视图,单击listview项我将显示一个不同的视图。我能够做到这一点,但这里的问题是,当我单击imageview时,打开的视图包含一些其他列表项对象的信息,而不是包含在其图像视图被单击的列表项中的对象。我尝试了很多方法来获得解决方案,但没有得到解决方案。所以我提出这个问题,请帮帮我 这是我的自定义

我正在实现一个在listview中使用的自定义适配器。我正在用一些文本消息和我的一个对象类填充listview。每个列表项中都有一个imageview,单击该imageview我将显示一个包含对象信息的视图,单击listview项我将显示一个不同的视图。我能够做到这一点,但这里的问题是,当我单击imageview时,打开的视图包含一些其他列表项对象的信息,而不是包含在其图像视图被单击的列表项中的对象。我尝试了很多方法来获得解决方案,但没有得到解决方案。所以我提出这个问题,请帮帮我

  • 这是我的自定义适配器getView()方法的实现-

  • 3.ListView实现-

                   listView = ((ListView)this.findViewById(R.id.listTaskView));
               listView.setAdapter(simpleAdapter);
                   listView.setOnItemClickListener(new OnItemClickListener() {
                  public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
                  Task task = null;
                      @SuppressWarnings("unchecked")
                      Map<String, Object> listItem = (Map<String, Object>) listView
                           .getItemAtPosition(position);
                         task = (Task) listItem.get("item");
    
                      if (task != null) {
                      activeTask = task;
    
                     //method called when listview item is clicked
                     showActivityListView(view);
                 }
              }
            }
        });
    
    listView=((listView)this.findViewById(R.id.listTaskView));
    setAdapter(simpleAdapter);
    setOnItemClickListener(新的OnItemClickListener(){
    public void onItemClick(AdapterView父级、视图、,
    内部位置,长id){
    Task=null;
    @抑制警告(“未选中”)
    映射列表项=(映射)列表视图
    .getItemAtPosition(位置);
    task=(task)listItem.get(“项”);
    如果(任务!=null){
    活动任务=任务;
    //单击listview项时调用的方法
    showActivityListView(视图);
    }
    }
    }
    });
    
  • 用作listview项的布局文件-

       <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal" >
    
              <TextView
                      android:id="@+id/taskPercentage"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_margin="8dp"
                      android:textAppearance="?android:attr/textAppearanceLarge"
                      android:textColor="@color/blue_shade"
                      android:textSize="20sp"
                      android:textStyle="bold" >
             </TextView>
    
       <LinearLayout
             android:layout_width="0px"
             android:layout_height="wrap_content"
             android:layout_marginBottom="5dp"
             android:layout_marginTop="5dp"
             android:layout_weight="1"
             android:orientation="vertical"
             android:paddingLeft="0px"
             android:paddingRight="5dp" >
    
       <RelativeLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >
    
             <TextView
                  android:id="@+id/taskname"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:textColor="#FFF38585"
                  android:textSize="15sp" >
             </TextView>
             <ImageView
                  android:id="@+id/edit_task"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentRight="true"
                  android:src="@drawable/edit_form"/>
        </RelativeLayout>
    
             <TextView
                  android:id="@+id/taskdesc"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="4dp"
                  android:textColor="#FF2CE4A4"
                  android:textSize="13sp" >
            </TextView>
       </LinearLayout>
    
       </LinearLayout>
    
    
    

  • 这是实现参考。如果有人能告诉我问题是什么,或者如何使此功能正常工作,请务必帮助我。提前谢谢。

    从您的
    main活动
    片段
    ,您应该初始化
    列表视图
    ,并设置其适配器。您还应该在其中设置
    onItemClickListener
    MainActivity
    )。然后从列表中获取给定
    位置
    参数中的
    对象
    ,并根据它执行操作

    示例:

    ListView listViewItems = new ListView(this);
        listViewItems.setAdapter(adapter);
        listViewItems.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            Toast.makeText(getApplicationContext(),
            "Click ListItem Number " + position, Toast.LENGTH_LONG)
            .show();
           }
          }); 
    
    ListView listViewItems=新建ListView(此);
    setAdapter(适配器);
    setOnItemClickListener(新的OnItemClickListener(){
    @凌驾
    public void onItemClick(AdapterView父级、视图、,
    内部位置,长id){
    Toast.makeText(getApplicationContext(),
    “点击列表项目编号”+位置,烤面包片长度(长)
    .show();
    }
    }); 
    
    您可以创建自己的
    对象
    类并将其传递到列表,然后检查项目位置并执行操作

    我希望它有帮助

    试试:

    final ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
    taskEdit.setOnClickListener(new OnClickListener() { 
      @Override
      public void onClick(View v) {
         newTask(taskEdit, false);
        }
      });
         return convertView;
    }
    

    你也可以发布newTask代码吗?我尝试将imageview声明为final,但没有成功。我将添加我的实现的更多代码片段以供参考。感谢您到目前为止的支持。我已经提供了一些更多信息,如果您能够解决问题,请与我联系。我已经提供了一些更多信息,如果您能够解决问题,请与我联系。顺便说一下,在提出这个问题之前,我已经实现了ListView实现,就像您在回答中所写的那样。但这不是问题所在。问题是,我能够导航到所需的视图,但信息不正确。i、 e假设我在列表项图像视图的第三个位置进行了剪切,我得到的值是列表项图像视图中第六个列表项中包含的对象的值。通过放置一些日志,我观察到getView()适配器类的方法被多次调用。单击图像视图时打开的视图包含的对象信息与调用getView()方法的次数相同。i、 e如果getView()方法在填充listview时被调用了6次,则图像视图的clikc上包含位置6处任务对象的信息
    ListView listViewItems = new ListView(this);
        listViewItems.setAdapter(adapter);
        listViewItems.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            Toast.makeText(getApplicationContext(),
            "Click ListItem Number " + position, Toast.LENGTH_LONG)
            .show();
           }
          }); 
    
    final ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
    taskEdit.setOnClickListener(new OnClickListener() { 
      @Override
      public void onClick(View v) {
         newTask(taskEdit, false);
        }
      });
         return convertView;
    }