目的
- 组合控件,点击可以折叠和打开
- 在ListView里使用这个控件
一、组合控件
组合控件:使用已有的控件,组合成一个整体来使用。控件名:FoldLabelView
-
可以折叠的控件名:LabelView
-
自定义类LabelView继承ConstraintLayout
LayoutInflater.from(context).inflate(R.layout.label_view,this,true);
-
在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>
-
自定义类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);
}
}
}