android ListView二级列表给我个可用的demo 入参为本地日历数据List 数据有calId calName不限于这两个参数 重要的地方写上注释
时间: 2024-02-23 19:58:39 浏览: 90
好的,以下是一个简单的 Android ListView 二级列表的示例代码:
首先,创建一个名为 `MainActivity` 的 Activity,并在其中添加一个名为 `listView` 的 ListView 控件。
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
private ListView listView;
private List<Calendar> calendarList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化ListView和数据
listView = findViewById(R.id.listView);
calendarList = getCalendarList();
// 为ListView设置适配器
CalendarListAdapter adapter = new CalendarListAdapter(this, calendarList);
listView.setAdapter(adapter);
}
// 获取日历数据列表
private List<Calendar> getCalendarList() {
// 从本地数据库或者其他数据源中获取数据列表
// 这里简单地创建了一个包含两个日历的列表
List<Calendar> list = new ArrayList<>();
list.add(new Calendar(1, "日历1"));
list.add(new Calendar(2, "日历2"));
return list;
}
}
```
接下来,创建一个名为 `CalendarListAdapter` 的适配器类,并继承自 `BaseExpandableListAdapter`。
CalendarListAdapter.java:
```java
public class CalendarListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<Calendar> calendarList;
public CalendarListAdapter(Context context, List<Calendar> list) {
this.context = context;
this.calendarList = list;
}
@Override
public int getGroupCount() {
return calendarList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1; // 每个日历都只有一个名称,所以返回1
}
@Override
public Object getGroup(int groupPosition) {
return calendarList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return calendarList.get(groupPosition).getName(); // 返回日历名称
}
@Override
public long getGroupId(int groupPosition) {
return calendarList.get(groupPosition).getId();
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_group_item, parent, false);
}
TextView tvName = convertView.findViewById(R.id.tvName);
tvName.setText(calendarList.get(groupPosition).getName());
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_child_item, parent, false);
}
TextView tvName = convertView.findViewById(R.id.tvName);
tvName.setText(getChild(groupPosition, childPosition).toString());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
```
最后,创建两个布局文件,分别用于显示组和子项的内容。
list_group_item.xml:
```xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="18sp"
android:textStyle="bold" />
```
list_child_item.xml:
```xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp" />
```
注意:这里的 `Calendar` 类是一个自定义的类,包含 `id` 和 `name` 两个属性。你需要根据自己的数据结构进行调整。
阅读全文