0

我已经扩展Application并声明了一个public ArrayList我用来保存数据的那里(我知道它不是 android 中的 Singleton 应该是,但它是我唯一可以工作的东西)。

问题: 当我显示我的CreateNewObject对话框并按 OK 时,我收到以下错误。

错误:

10-30 10:20:19.069: E/AndroidRuntime(632): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(16908298, class android.widget.ListView) with Adapter(class com.nuclear.gfr.adapter.PatientAdapter)]

我的代码:

public class NewPatientDialog extends DialogFragment {

    private static final String TAG = "NUKClear";

    OnNewPatientlistener listener;

    private NewPatientDialog() {

    }

    public interface OnNewPatientlistener {
        public void OnNewPatient(Patient newPatient);
    }

    public void addPatientAction(Patient patient) {
        OnNewPatientlistener activity = (OnNewPatientlistener) getActivity();
        activity.OnNewPatient(patient);
    }

    public static NewPatientDialog newInstance(String title) {
        NewPatientDialog frag = new NewPatientDialog();
        Bundle args = new Bundle();
        args.putString("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String title = getArguments().getString("title");

        LayoutInflater inflater = (LayoutInflater) getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final View newPatient = inflater.inflate(R.layout.new_patient_dialog,
                null);
        Log.d(TAG, "Creating dialog for new patientinput...");
        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setView(newPatient)
                .setPositiveButton(R.string.alert_dialog_ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                final EditText name = (EditText) newPatient
                                        .findViewById(R.id.name_edit);
                                final EditText ssn = (EditText) newPatient
                                        .findViewById(R.id.ssn_edit);
                                final EditText accnum = (EditText) newPatient
                                        .findViewById(R.id.accnr_edit);

                                final Patient patient = new Patient(ssn.getText()
                                        .toString(), name.getText().toString(),
                                        new Study(SimpleDateFormat
                                                .getDateInstance().toString(),
                                                accnum.getText().toString()));

                                addPatientAction(patient); 

                                DatabaseHelper db = new DatabaseHelper(
                                        getActivity());
                                db.addPatientStudy(patient);

                                /*DataManager dm = new DataManager(getActivity()
                                        .getBaseContext());
                                dm.addPatient(patient);*/

                                /*
                                 * PatientManager pm = new
                                 * PatientManager(getActivity
                                 * ().getBaseContext()); pm.add(patient);
                                 */

                                // Interfacecallback
                                /*
                                 * OnNewPatientlistener activity =
                                 * (OnNewPatientlistener) getActivity();
                                 * activity.OnNewPatient(patient);
                                 */

                            }
                        })
                .setNegativeButton(R.string.alert_dialog_cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                dismiss();
                            }
                        }).create();

    }
}

谁能解释为什么会发生这种情况以及如何规避这种情况?

4

1 回答 1

0

添加...

runOnUiThread(new Runnable() {
              public void run() {
                  GFRApplication.dPatients.add(newPatient);
              }
            });

......成功了。

于 2012-10-30T22:01:54.770 回答