为具有 2 个视图的 ListView 中的项目设置 OnClickListener [英] Set OnClickListener for items in ListView with 2 Views

查看:20
本文介绍了为具有 2 个视图的 ListView 中的项目设置 OnClickListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 ListView,其中包含具有这种布局的项目:

I have a ListView, with items with this layout:

<LinearLayout ...>            
    <LinearLayout ...>
       <!--Elements -->
    </LinearLayout>

    <LinearLayout ...>
       <!--Elements -->
    </LinearLayout>            
</LinearLayout>

所以我的项目有两个不同的部分.我希望能够在每个项目中设置不同的 onclickListener(每个 LinearLayout 一个).到目前为止,我已经尝试覆盖 onListItemClick,但它似乎无法正常工作:

So my items have two different sections. I want to be able to setup different onclickListener inside each item(one for each LinearLayout). I have tried so far to override the onListItemClick, but it doesnt seem to work properly:

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id);

    ViewGroup vg = (ViewGroup)v;
    vg.getChildAt(0).setOnClickListener(new OnClickListener() {         
        @Override
        public void onClick(View v) {
            Toast.makeText(mCtx, "element1", Toast.LENGTH_SHORT).show();                
        }
    });
    vg.getChildAt(1).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(mCtx, "element2", Toast.LENGTH_SHORT).show();                
        }
    });

}

有什么想法可以解决这个问题吗?

Any ideas how to tackle the problem?

谢谢.

推荐答案

你必须对 ListView 中的所有元素使用 set onclicklistener.我创建了一个列表视图.为列表视图设置一个适配器.我的适配器负责显示列表视图的每个元素.所以在 getView() 中,我将把 onclicklistener 分配给我想要获取点击事件的所有元素.

You have to use set onclicklistener to all elements inside ListView. I have created a listview. set an adapter to the listview. My adapter is reponsible to show each element of the listview. so inside getView() I will assign onclicklistener to all the elemnts to whom i want to get the click event.

public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder holder;
        if(convertView==null){
            vi = inflater.inflate(R.layout.item, null);
            holder=new ViewHolder();
            holder.text=(TextView)vi.findViewById(R.id.text);;
            holder.image=(ImageView)vi.findViewById(R.id.image);
            vi.setTag(holder);
        }
        else
            holder=(ViewHolder)vi.getTag();

        holder.text.setText("item "+position);
        holder.image.setTag(data.get(position));
        holder.image.setOnClickListener(this);
        holder.text.setOnClickListener(this);
        imageLoader.DisplayImage(data.get(position), activity, holder.image);
        return vi;
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        System.out.println("...clicked view is...."+arg0);
    }

谢谢迪帕克

这篇关于为具有 2 个视图的 ListView 中的项目设置 OnClickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆