Android:在ListView里使用组合控件设置点击监听


目的

  1. 组合控件,点击可以折叠和打开
  2. 在ListView里使用这个控件

一、组合控件

组合控件:使用已有的控件,组合成一个整体来使用。
控件名:FoldLabelView
  1. 可以折叠的控件名:LabelView

  2. 自定义类LabelView继承ConstraintLayout

    LayoutInflater.from(context).inflate(R.layout.label_view,this,true);
    
  3. 在FoldLabelView里添加LabelView,注意根容器id

    <androidx.constraintlayout.widget.ConstraintLayout
     	xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/label"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        </androidx.constraintlayout.widget.ConstraintLayout>
    
  4. 自定义类FoldLabelView继承ConstraintLayout

    LayoutInflater.from(context).inflate(R.layout.fold_label_view, this, true);
    

二、自定义ListView

1.布局ListView

<ListView
	android:id="@+id/lv1"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	app:layout_constraintLeft_toLeftOf="parent"
	app:layout_constraintTop_toTopOf="parent" />

2.活动


//在一个Avtivity里,其他的代码省略...
ListView lv1 = findViewById(R.id.lv1);
lv1.setAdapter(new MyAdapter());

//内部类
private class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return 10;
        }
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.fold_label_view, null);
            //下面有定义
            ViewHolder viewHolder = new ViewHolder(view);
            //这里对FoldLabelView整体做点击监听
            viewHolder.label.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (viewHolder.fold) {
                        viewHolder.lv1.setVisibility(VISIBLE);
                        viewHolder.fold = false;
                    } else {
                        viewHolder.lv1.setVisibility(GONE);
                        viewHolder.fold = true;
                    }
                    System.out.println("被点击了");
                }
            });
            return view;
        }
		//这里是FoldLabelView里将要用到的控件
        final class ViewHolder {
        	//这里是根控件
            ConstraintLayout label;
            LabelView lv1;
            //是否折叠
            boolean fold = true;

            public ViewHolder(View view) {
                label = view.findViewById(R.id.label);
                lv1 = view.findViewById(R.id.lv1);
            }
        }
    }

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值