android - 如何通过用户输入动态填充 ExpandableListView?

标签 android expandablelistview

我正在构建一个 GPA 跟踪器应用程序,我发现 ExpandableListView 是最适合使用的东西。函数是这样的:

用户单击 FAB 按钮并添加学期(组/标题)。 用户单击生成的学期(组/标题)并添加类(class)。

我可以添加组,但我不知道如何为这些组动态添加子项。基本上,我想获取点击组的 ID,启动一个 alertDialog 让用户输入类(class)信息并将该信息添加到列表中。

我尝试使用 setOnGroupClickListener(new ExpandableListView.OnGroupClickListener()) 方法来做到这一点,但现在我无法展开组。无论如何,这不是我的最终实现。我真的只是想让这个逻辑起作用。

这些是包含我的学期和类(class)信息的列表和 HashMap :

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;

这是我添加学期的地方(组/标题)

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 方法来添加子项:

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,然后将我的 child 添加到该组。

最佳答案

在对话框的 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();
                }
            });

关于android - 如何通过用户输入动态填充 ExpandableListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44902501/

相关文章:

android - 如何以编程方式创建垂直或水平指南

java - 安卓|如何在 ScrollView 中使用 ExpandableListView?

android - 有人可以解释 RemoteViews GC 行为吗?

新 fragment/Activity 上的 Android 汉堡包箭头过渡

Android:相机预览上的透明 WebView

android - 将可扩展 ListView 与 CollapsingToolbarLayout 一起使用时出现问题

java - 无法解析方法 setOnChildClickListener

java - 如何将现有 SQLite 数据库连接到 ExpandableListView?

android - 如何使用两个 fragment 实现视频和视频列表

android - 如何从 C++ 文件访问 $(TARGET_ARCH)?