需要帮助在使用baseadapter的listview上设置click事件

时间:2012-06-15 13:07:53

标签: java android baseadapter

以下是我设置列表视图的代码。我想在listview上实现click事件,但它不起作用。我在清单中为listview设置了clickable属性。此外,我的列表视图位于相对布局内,并且此相对布局位于线性布局中。我的list_details具有相对布局的textview和imageview。你能帮我搞清楚吗?提前谢谢。

public class ListImageBaseAdapter extends BaseAdapter {
...

public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.list_details, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView.findViewById(R.id.name);
        holder.itemImage = (ImageView) convertView.findViewById(R.id.photo);

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

        System.out.println(titles.length);

        holder.txt_itemName.setText(titles[position]);
        holder.itemImage.setImageResource(imgid[position]);

            holder.itemImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            System.out.println("here1");
        }
    });

    holder.txt_itemName.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            System.out.println("here2");
        }
    });


    return convertView;
}
...

3 个答案:

答案 0 :(得分:1)

 I want to implement a click event on the listview, but it is not working. 

检查两件事

1-你有实现列表点击这个方式吗?

 list.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        // @todo
                }
        }); 

2-列表行中是否有可点击的项目     如果是,请参考

Android: ListView elements with multiple clickable buttons

http://mylifewithandroid.blogspot.in/2011/08/focus-problems-with-list-rows-and.html

用于处理行中的点击项目:

1- Imaplent you activity with View.OnClickListener
2- Pass it to adpter 
3- holder.itemImage.setOnClickListener(mActivity)
4- override the View.OnClickListener in activity 

答案 1 :(得分:1)

您有几个选择。

您可以在getView()方法中返回convertView之前应用侦听器。像这样:

public View getView(int position, View convertView, ViewGroup parent) {
    .....
    convertView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

    return convertView;
}

OR(正如@DheereshSingh所提到的)你可以在包含ListView的Activity内部的一个级别完成此任务。

ListView lv = (ListView)findViewById(R.id.listView);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }
}); 

答案 2 :(得分:0)

如果您使用的是listview,您可以随时使用Dheeresh的方法。

如果您只是在寻找onclick,您也可以使用

View view = convertView;
view.setTag(position);//Sets a position
view.setonclicklistener(new OnClickListener){//creates a onClicklistener for tag

public void onClick(View v){
//Do something
}

}

您也可以将它用于gridview。

如果你想做额外的东西,你可以实际设置baseadapter中的每个项目,让点击事件每次都做不同的事情。