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

时间:2014-02-23 15:05:02

标签: android listview custom-adapter

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

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

        List<Map<String, Object>> data = getTasksData(tasks);
    SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
    R.layout.list_item_detail_layout, new String[] { "itemstatus","itemname",         "itemdesc"}, new int[] {R.id.taskPercentage, R.id.taskname, R.id.taskdesc}){
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
    if (convertView == null) {
       LayoutInflater inflater = getLayoutInflater();
       convertView = inflater.inflate(R.layout.list_item_detail_layout, null, false)
    }       
    @SuppressWarnings("unchecked")
    
    //map object used to populate each list item
    Map<String, Object> listItem = (Map<String, Object>)                                                                   
                                         listView.getItemAtPosition(position);
    
    //object whose information is to be displayed in the view
    Task task = (Task)listItem.get("item");
    if(task != null){
       activeTask = task;
    }
    
    //text views to be displayed in each list item
    TextView taskpercentage = (TextView)convertView.findViewById(R.id.taskPercentage);
    taskpercentage.setText((String)listItem.get("itemstatus"));
    
    TextView taskname = (TextView)convertView.findViewById(R.id.taskname);
    taskname.setText((String)listItem.get("itemname"));
    
    TextView taskDescription = (TextView)convertView.findViewById(R.id.taskdesc);
    taskDescription.setText((String)listItem.get("itemdesc"));
    
    
    //imageview whose click listener has been set to navigate to a view
    ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
    taskEdit.setOnClickListener(new OnClickListener() { 
      @Override
      public void onClick(View v) {
    
         //method called when image icon on the list view is clicked
         newTask(v, false);
        }
      });
         return convertView;
    }
     };
    

    //单击列表视图中的图像图标时调用的方法

  2. newTask(v,false)代码 -

    private void newTask(final View view, final boolean isNew) {
       setContentView(R.layout.task_view);
    
       final EditText taskName = (EditText) this
             .findViewById(R.id.task_name_edtxt);
       if (isNew == false) {
           taskName.setText(activeTask.getName());
       }
    
    }
    
  3. 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);
                 }
              }
            }
        });
    
    1. 用作列表视图项目的布局文件 -

         <?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>
      
    2. 这是实现参考。如果有人能告诉我问题是什么或者如何使这个功能正常工作,请帮帮我。谢谢。

2 个答案:

答案 0 :(得分:1)

尝试:

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;
}

答案 1 :(得分:0)

MainActivityFragment,您应该初始化ListView并设置其适配器。您还应在其中设置onItemClickListenerMainActivity)。然后从列表中获取给定object参数中的position并根据它执行您的操作。

示例:

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();
       }
      }); 

您可以创建自己的Object课程并将其传递到列表中,然后检查项目位置并执行操作。

我希望它有所帮助