【问题标题】:Listview Unable to update when inserting a new data from custom dialog从自定义对话框插入新数据时,Listview 无法更新
【发布时间】:2022-01-21 11:04:43
【问题描述】:

我正在尝试将 SQLite 数据库中的数据显示到自定义列表视图。数据是从自定义对话框中插入的,用户单击它应该更新列表视图的肯定按钮,但列表视图不会更新。只有当我单击后退按钮并重新进入活动时,它才会更新。我该怎么办?

SubjectListActivity.java

public class SubjectListActivity extends AppCompatActivity {
    private ListView lv_SubjectList;
    private FloatingActionButton btn_subjectAdd, btn_subjectView;
    DatabaseHelper databaseHelper;
    ArrayList<SubjectListModel> arrayList;
    SubjectListAdapter subjectListAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_subject_list);
        intViews();
        databaseHelper = new DatabaseHelper(this);
        arrayList = new ArrayList<>();
        loadListView();

        btn_subjectAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openDialog();
                loadListView();
            }
        });

        btn_subjectView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

    }

    private void loadListView () {
        arrayList = databaseHelper.getAllSubjectListData();
        subjectListAdapter = new SubjectListAdapter(this, arrayList);
        lv_SubjectList.setAdapter(subjectListAdapter);
    }

    public void openDialog () {
        SubjectListDialog subjectListDialog = new SubjectListDialog();
        subjectListDialog.show(getSupportFragmentManager(), "subject list dialog");
    }

    private void intViews() {
        lv_SubjectList = findViewById(R.id.lv_SubjectList);
        btn_subjectView = findViewById(R.id.btn_subjectDelete);
        btn_subjectAdd = findViewById(R.id.btn_subjectAdd);
    }
}

SubjectListDialog.java

public class SubjectListDialog extends AppCompatDialogFragment {
    private EditText et_subjectCode, et_subjectName, et_creditHour;
    DatabaseHelper databaseHelper;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        databaseHelper = new DatabaseHelper(getContext());
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.subject_list_dialog_layout, null);

        builder.setView(view)
                .setTitle("Add Subject")
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                })
                .setPositiveButton("confirm", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        insert();
                    }
                });
        et_subjectCode = view.findViewById(R.id.et_subjectCode);
        et_subjectName = view.findViewById(R.id.et_subjectName);
        et_creditHour = view.findViewById(R.id.et_creditHour);
        return builder.create();
    }

    private void insert() {
        boolean result = databaseHelper.insertSubjectList(et_subjectCode.getText().toString(), et_subjectName.getText().toString(),Integer.parseInt(et_creditHour.getText().toString()));
        if (result) {
            Toast.makeText(requireContext(), "Data has been added", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(requireContext(), "Please insert all the fields correctly", Toast.LENGTH_SHORT).show();
        }
    }

}

【问题讨论】:

    标签: java android sqlite listview dialog


    【解决方案1】:

    看起来,用户单击肯定按钮后,您不会重新加载数据。您可以重写 onResume 方法并添加更多代码来更新列表中的数据并调用adapter.notifyDataSetChanged() 来刷新列表视图中的数据。

    【讨论】:

    • 我尝试了您的建议并将此代码放入 onResume() 并且 ListView 没有更新:arrayList.clear(); arrayList.addAll(databaseHelper.getAllSubjectListData()); subjectListAdapter.notifyDataSetChanged();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2019-02-17
    • 2021-11-23
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多