2012-04-16 31 views
3

我有两个布局如何从自定义列表适配器中获取listview的行索引?

  1. main.xml -----通过单一的ListView(比如listview_01)。
  2. row.xml -----随着ImageView的(比如imageView_01)&一个TextView(说textView_01)

我与row.xml使用数组数据,我有我的填充作为listview_01一行。
我想对onclick()事件imageView_01执行操作,它的工作。
我已在imageView_01上添加onClick()getView()在我的CustomlistAdapter中。

但任何人都可以告诉我如何获取一行图像的listview_01的onClick()事件中的行索引,在一个CustomListAdapter?

这里是我的代码

道歉,但我不能载我的整个活动&适配器代码

一些活动代码

listView_episodesList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

     mQuickAction.show(arg1); 

    } 
}); 

一些适配器代码

ImageView imageView_EpisodePic = (ImageView) convertView.findViewById(R.id.imageView_episode_pic); 
drawableManager.fetchDrawableOnThread(episodeTemp.episodeImage, imageView_EpisodePic); 

imageView_EpisodePic.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     Toast.makeText(context, "Click on image", Toast.LENGTH_LONG).show(); 
    } 
}); 

从我的活动我可以访问我点击的listView行索引。但从适配器我不能。 我只是想行索引ListView(main.xml)上点击ImageView (row.xml)

+0

粘贴您的适配器和活动代码 – waqaslam 2012-04-16 13:21:25

+0

Waqas,请参考我上面的代码。 – MicroEyes 2012-04-16 13:44:15

回答

1

您可以尝试在onClick(View v)将返回列表视图项的索引mListView.getPositionForView(v);。 (需要注意的是:我不知道该适配器,我只是猜测,你可以用它)

+0

请再次参考我的问题。我已经添加了我的代码。 – MicroEyes 2012-04-16 13:43:45

0

onItemSelectedListeneter()将适配器的看法和立场,也ID ..在哪个位置是你所需要的(arg1

+0

sandy,OnItemSelectedListener()用于ListView onClick()。我想附加imageView onclick()事件在imageView onClick我想要获取行索引..我认为这是可能的,只有从自定义光标,我已经填补我的列表视图 – MicroEyes 2012-04-16 13:39:49

0

我遇到了同样的问题,并且很惊讶我无法从自定义适配器类中找到更好的方法。据我所知,Nikola的解决方案可以在Activity或Fragment类中使用,但不能在自定义适配器中使用。

我有一个问题,在我的对象的ImageView属性中设置第一个索引[0]不能正确返回,但设置我的对象的'name'属性的标记完美地工作。我将继续寻找更好的方法来做到这一点,但现在这似乎工作正常。

 public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 

     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.row_project, null); 

      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.name = (TextView)view.findViewById(R.id.textProjectName); 
      viewHolder.desc = (TextView)view.findViewById(R.id.textProjDesc); 
      viewHolder.image = (ImageView)view.findViewById(R.id.imgProj);   
      viewHolder.name.setTag(position); 

      Log.d(TAG, "Position: " + position); 


      viewHolder.image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.d(TAG, "Image Selected at Index: " + viewHolder.name.getTag()); 
       } 

      }); 

      view.setTag(viewHolder); 
     } 
     else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).name.setTag(list.get(position)); 
     } 

     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.name.setText(list.get(position).getName()); 
     holder.desc.setText(list.get(position).getDescription()); 

     return view; 
    } 
} 
-1

在我的自定义适配器,我有:

public View getView(final int position, View convertView, ViewGroup parent) { 

,其中位置是行的索引点击。这应该可以在您的onClick()方法中访问。

0

列表中某个项目的行ID正在设置为“convertView”的ID。

convertView.setId(位置)

当按下一个项目/选择,该项目的行id是OnClickListener内取出。

 convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 

您可以设置ID为convertView的任何子女。例如,

convertView.imageView.setId(position);

然后取ID如下,

imageView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int selectedPosition = v.getId(); 
     } 
    }); 

全功能

public View getView(int position, View convertView, ViewGroup vg) { 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.row_book_item, null); 
     viewHolder = new ViewHolder(); 

     // ... 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    if (listItems.size() > 0) { 
     // item position is set here. this is exactly the same position of your item in the list 
     convertView.setId(position); 
     convertView.imageView.setId(position); 

     // ... 

     convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 

     imageView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 


    } 
    return convertView; 
} 
+0

也许添加一些解释给你片段。 – ppasler 2017-02-07 12:41:15

相关问题