单击ListView ListItem中的ImageView并获取位置?

时间:2011-12-20 05:25:33

标签: android listview android-listview listitem

目前,当点击ListItem时,我抓住它的位置并将其传递给我的StopsScheduleActiviy。我想检测何时单击该ListItem的ImageView,以便我可以启动我的MapActivity并将其传递给位置。

基本上:单击ImageView启动MapsActivity,否则单击ListItem上的任何其他位置启动StopsScheduleActivity。在这两种情况下我都需要这个职位。我怎样才能做到这一点?

这是我当前的onItemClick侦听器。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    Intent myIntent = new Intent(this, StopsScheduleActivity.class);
    myIntent.putExtra("stop", stops.get(position));

    startActivity(myIntent);

    Log.i("Winnipeg Bus", "Stop item #" + id + " clicked.");
}

这是我的ListView,其中包含我想要点击的ImageView地图。谢谢!

enter image description here

4 个答案:

答案 0 :(得分:26)

在您的自定义适配器getView()方法中,当您初始化ImageView时。添加位置作为图像视图的标记。因此,每当新的ImageView出现时,它将在其标记中保持其位置。然后,只需在OnClickListener()中添加getView()

OnClickListener(View view)包含用户点击的视图。因此,当用户单击列表中的任何图像视图时。然后它将作为点击视图传递给OnClickListener(View view)。我们知道我们的ImageView包含作为标记的位置。那么标签可以告诉我们这个ImageView是为了什么?位置。 :)

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

        if(convertView == null){
            convertView = inflater.inflate(R.layout.list_row, parent, false);
        }

        ImageView imageView = (ImageView) convertView.findViewById(R.id.videoListImage);
        imageView.setTag(new Integer(position));
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, "ImageView clicked for the row = "+view.getTag().toString(), Toast.LENGTH_SHORT).show();
            }
        });

        return convertView;
    }

您将获得点击的ImageView位置。

答案 1 :(得分:12)

对于 ImageView的点击您必须为列表视图制作自定义适配器

在adpater的getView()方法中只需编写imageView's onClick(),然后从该imageview的onClick()开始新的活动。

对于自定义列表,请查看本教程Android Series: Custom ListView items and adapters ..

答案 2 :(得分:4)

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            System.out.println("getView " + position + " " + convertView);
            ViewHolder holder = null;

            if (convertView == null) {

                convertView = LayoutInflater.from(conText).inflate(
                        R.layout.gridgoggle, parent, false);
                holder = new ViewHolder();

                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }


            holder.imageView1.setImageResource(Integer.parseInt((mData
                    .get(position).get("image"))));

            holder.imageView1.setId(position);

            holder.imageView1.setOnClickListener(new OnClickListener() {
                public void onClick(View v)
 {

                                   int id = v.getId();
//here id is position.

  Intent myIntent = new Intent(this, StopsScheduleActivity.class);
  myIntent.putExtra("stop", id);

 startActivity(myIntent);


                }
            });
            return convertView;
        }

答案 3 :(得分:0)

通过三个简单的步骤:

1在你的适配器方法getView(int position,View convertView,ViewGroup parent)中:

ImageView imageview =(ImageView) convertView.findViewById(R.id.imageView);
imageview.setTag(new Integer(position));

2在layout.xml中,在onClick()

上添加方法ImageView

3 implements onClick()方法并按view.getTag()

检索索引