如何通过用户输入动态填充 ExpandableListView?
How to dynamically populate ExpandableListView through user input?
我正在构建一个 GPA 跟踪器应用程序,我发现 ExpandableListView 是最适合使用的东西。函数是这样的:
用户单击 FAB 按钮并添加一个学期 (group/header)。
用户单击生成的学期 (group/header) 并添加课程。
我可以添加组,但我不知道如何为这些组动态添加 children。基本上,我想获取单击组的 ID,启动一个 alertDialog 让用户输入课程信息并将该信息添加到列表中。
我尝试用 setOnGroupClickListener(new ExpandableListView.OnGroupClickListener())
方法做到这一点,但现在我无法扩展该组。无论如何,这不是我的最终实施。我真的只是想让这个逻辑起作用。
这些是包含我的学期和课程信息的列表和哈希图:
public class MainActivity extends Activity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader = new ArrayList<>();
HashMap<String, List<String>> listDataChild = new HashMap<String, List<String>>();
List<String>listCourses = new ArrayList<>();
private String semester, course;
这是我添加学期的地方 (group/header)
private void addSemester() {
View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.parent_dialog_layout, null);
final EditText et_semester = (EditText)dialogView.findViewById(R.id.et_semester);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Semester");
builder.setView(dialogView);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
semester = et_semester.getText().toString();
listDataHeader.add(semester);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
listAdapter.notifyDataSetChanged();
builder.show();
}
在我的 onCreate()
中,我正在调用我的 setOnGroupClickListener
方法来添加 children:
expListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, final int groupPosition, long id) {
parent.smoothScrollToPosition(groupPosition);
View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.child_dialog_layout, null);
final EditText et_course = (EditText)dialogView.findViewById(R.id.et_course);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Course");
builder.setView(dialogView);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
course = et_course.getText().toString();
listDataChild.put(listDataHeader.get(groupPosition), listCourses);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
listAdapter.notifyDataSetChanged();
builder.show();
return true;
}
});
listAdapter.notifyDataSetChanged();
}
我想访问点击组的 ID,然后将我的 children 添加到该组。
在对话框的界面 OnClickListener 中调用 notifyDataSetChanged();:
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
course = et_course.getText().toString();
listDataChild.put(listDataHeader.get(groupPosition), listCourses);
notifyDataSetChanged();
}
});
我正在构建一个 GPA 跟踪器应用程序,我发现 ExpandableListView 是最适合使用的东西。函数是这样的:
用户单击 FAB 按钮并添加一个学期 (group/header)。 用户单击生成的学期 (group/header) 并添加课程。
我可以添加组,但我不知道如何为这些组动态添加 children。基本上,我想获取单击组的 ID,启动一个 alertDialog 让用户输入课程信息并将该信息添加到列表中。
我尝试用 setOnGroupClickListener(new ExpandableListView.OnGroupClickListener())
方法做到这一点,但现在我无法扩展该组。无论如何,这不是我的最终实施。我真的只是想让这个逻辑起作用。
这些是包含我的学期和课程信息的列表和哈希图:
public class MainActivity extends Activity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader = new ArrayList<>();
HashMap<String, List<String>> listDataChild = new HashMap<String, List<String>>();
List<String>listCourses = new ArrayList<>();
private String semester, course;
这是我添加学期的地方 (group/header)
private void addSemester() {
View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.parent_dialog_layout, null);
final EditText et_semester = (EditText)dialogView.findViewById(R.id.et_semester);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Semester");
builder.setView(dialogView);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
semester = et_semester.getText().toString();
listDataHeader.add(semester);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
listAdapter.notifyDataSetChanged();
builder.show();
}
在我的 onCreate()
中,我正在调用我的 setOnGroupClickListener
方法来添加 children:
expListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, final int groupPosition, long id) {
parent.smoothScrollToPosition(groupPosition);
View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.child_dialog_layout, null);
final EditText et_course = (EditText)dialogView.findViewById(R.id.et_course);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Course");
builder.setView(dialogView);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
course = et_course.getText().toString();
listDataChild.put(listDataHeader.get(groupPosition), listCourses);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
listAdapter.notifyDataSetChanged();
builder.show();
return true;
}
});
listAdapter.notifyDataSetChanged();
}
我想访问点击组的 ID,然后将我的 children 添加到该组。
在对话框的界面 OnClickListener 中调用 notifyDataSetChanged();:
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { course = et_course.getText().toString(); listDataChild.put(listDataHeader.get(groupPosition), listCourses); notifyDataSetChanged(); } });