convertView直接设置点击监听

本文探讨了在Android适配器的getView方法中设置点击监听的两种不同方式,一种直接给convertView设置监听器,另一种则通过其子View设置。详细分析了为何前者在某些情况下可能不生效的原因,并对比了两者的实现细节。

下面是我写的两个适配器adapter中的getView方法,第一个给convertView直接设置点击监听不起作用,第二个却可以点击,这是为什么呢?

@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (convertView == null) {
    viewHolder = new ViewHolder();
    convertView = LayoutInflater.from(context).inflate(R.layout.activity_my_borrow_money_list,viewGroup, false);

    viewHolder.tv2 = convertView.findViewById(R.id.tv_borrow2);
    viewHolder.tv3 = convertView.findViewById(R.id.tv_borrow3);
    viewHolder.tv4 = convertView.findViewById(R.id.tv_borrow4);
    viewHolder.rl = convertView.findViewById(R.id.rl_borrow_money_list);
    convertView.setTag(viewHolder);
} else {
    viewHolder = (ViewHolder) convertView.getTag();
}
String JKStatus = list.get(position).getHkschedule();
if ("0".equals(JKStatus)){
    viewHolder.tv2.setText("XXX");
    viewHolder.tv2.setTextColor(context.getResources().getColor(R.color.titleColor));
}else if ("1".equals(JKStatus)){
    viewHolder.tv2.setText("XXX");
    viewHolder.tv2.setTextColor(context.getResources().getColor(R.color.colorc7c7c7));
}else if ("2".equals(JKStatus)){
    viewHolder.tv2.setText("XXX");
    viewHolder.tv2.setTextColor(context.getResources().getColor(R.color.titleColor));
}else if ("3".equals(JKStatus)){
    viewHolder.tv2.setText("XXX");
    viewHolder.tv2.setTextColor(context.getResources().getColor(R.color.titleColor));
}
viewHolder.tv3.setText(list.get(position).getJkamount());

//        viewHolder.rl.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Log.e("test","222222");
//                Intent intent = new Intent(context, MyBorrowMoneyXiangqingActivity.class);
//                intent.putExtra("data", list.get(position).getId());
//                context.startActivity(intent);
//            }
//        });
convertView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.e("test","222222");
        Intent intent = new Intent(context, MyBorrowMoneyXiangqingActivity.class);
        intent.putExtra("data", list.get(position).getId());
        context.startActivity(intent);
    }
});

return convertView;
}
1
2
下面这个点击可以跳转

@Override
public View getView(int postition, View convertView, ViewGroup arg2) {
ViewHoler viewHolder = null;
if (convertView == null) {
    viewHolder = new ViewHoler();
    convertView = mInflater.inflate(R.layout.adapter_market, null);
    viewHolder.logo = (ImageView) convertView.findViewById(R.id.logo);
    viewHolder.title = (TextView) convertView.findViewById(R.id.title);
    viewHolder.money_number = (TextView) convertView
            .findViewById(R.id.money_number);
    convertView.setTag(viewHolder);
} else {
    viewHolder = (ViewHoler) convertView.getTag();
}
final MarketPojo data = pojo.get(postition);
ImageLoader.getInstance().displayImage(data.getLogo(),
        viewHolder.logo);
viewHolder.title.setText(data.getTitle());
viewHolder.money_number.setText(data.getAdvantage());
convertView.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(context, ProblemActivity.class);
        intent.putExtra("title", data.getTitle());
        intent.putExtra("url",data.getUrl());
        context.startActivity(intent);
    }
});
return convertView;
}
在Android中,`ListPopupWindow`是一个弹出式列表组件,它通常用于显示下拉菜单或选择列表。如果你想要设置`ListPopupWindow`的长按事件,实际上`ListPopupWindow`本身并不直接支持长按操作,因为它的设计主要是为了显示选项供用户选择,而不是提供自定义的触摸处理。 然而,你可以通过一些间接的方式来实现类似的功能。你可以创建一个自定义的`AdapterView`(如`BaseAdapter`的子类),并在其中添加长按监听器。然后将这个自定义的适配器传递给`ListPopupWindow`的`setAdapter()`方法。这样,当用户长按时,适配器会接收到事件,并可以按照你的需求执行相应操作,比如显示详细信息、删除项等。 以下是大致步骤: ```java // 创建自定义Adapter public class CustomListAdapter extends BaseAdapter { private final List<String> items; private OnLongItemClickListener mListener; public CustomListAdapter(List<String> items) { this.items = items; } // 设置长按监听 public void setOnLongItemClickListener(OnLongItemClickListener listener) { mListener = listener; } @Override public View getView(int position, View convertView, ViewGroup parent) { // ... (实现getView方法) // 添加长按监听 convertView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (mListener != null) { mListener.onItemLongClicked(position); } return true; // 长按默认不拦截其他操作,返回true } }); return convertView; } // ... (其他适配器方法) } // 使用自定义适配器 ListPopupWindow popupWindow = new ListPopupWindow(context); CustomListAdapter adapter = new CustomListAdapter(items); adapter.setOnItemClickListener(...); // 如果需要普通点击事件 adapter.setOnLongItemClickListener(yourLongItemClickListener); popupWindow.setAdapter(adapter); popupWindow.showAtLocation(parentView, Gravity.CENTER, 0, 0); ``` 记得在`CustomListAdapter`中定义一个`OnLongItemClickListener`接口,并在外部提供实例化该接口的回调函数,以便处理长按操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值