【问题标题】:Click ImageView within a ListView ListItem and get the position?单击 ListView ListItem 中的 ImageView 并获取位置?
【发布时间】:2011-12-20 05:25:32
【问题描述】:

目前,当单击 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 的地图。谢谢!

【问题讨论】:

  • onItemClick 的位置没有给出位置?
  • 在 GetView() 方法中制作自定义适配器,编写 ImageView 的 onClick().. 并做你想做的事......
  • @LalitPoptani 可以,但是我怎么知道 ImageView 被点击了?
  • @user370305 你能详细说明一下,也许在答案中有一些代码。谢谢。
  • 看这个教程Android Series: Custom ListView items and adapters在这个适配器的getView方法中你可以写imageView.setOnClick()和你的东西..

标签: android listview android-listview listitem


【解决方案1】:

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

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 位置。

【讨论】:

    【解决方案2】:

    对于ImageView的点击你必须为你的listview制作一个自定义适配器

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

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

    【讨论】:

    • 再次感谢。对于那些感兴趣的人,请参阅主要问题 cmets 了解更多信息。此外,Arslan 的回答显示代码实现与我最终使用的非常相似。
    • 如何将新活动的结果传回?这里如何使用 onActivityResult()?
    • @Jas - 使用 setResult() 方法在其中设置 Intent。并在onActivityResult() 中获得此意图。看stackoverflow.com/questions/920306/…
    • 我只能在活动中写onActivityResult() 对吗?如果我从我的适配器类中触发意图,我应该在哪里写 onActivityResult()
    • 在调用您的Adapter 的活动中,您正在使用startActivityForResult() 的上下文..
    【解决方案3】:
            @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;
            }
    

    【讨论】:

      【解决方案4】:

      只需三个简单的步骤:

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

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

      2 在layout.xml 中,在ImageView 上添加方法onClick()

      3implements onClick()方法并通过view.getTag()检索索引

      【讨论】:

      • 请了解内联格式`like this`的用法。我会编辑你的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      相关资源
      最近更新 更多