1

我有一个DialogFragment从使用ListView.

在 API 14 中,它运行良好。当NotifyDataSetChanged()在 Fragment 中按下 Save 按钮然后将其关闭时调用 。

然而,在 API 8 中,当我们在片段中按下“保存”按钮并返回到主活动后,会引发以下错误。

“java.lang.IllegalStateException:适配器的内容已更改,但 ListView 未收到通知。确保您的适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。[在 ListView(2131099672,类 android.widget.ListView) 与适配器(类 timepilot.EmployeesAdapter)]"

Update()我可以通过在父活动中编写一个方法来使用一种解决方法,该方法在NotfiyDataSetChange()按下 Save 时和之前在片段中简单地调用和调用它Dismiss(),并且效果很好,但感觉像是一种不太正确的解决方法。

无论如何要使用 monodroid 为 Dialog Fragment 实现 OnDimissListener 吗?(我已经看到很多使用 android 执行此操作的示例,但无法使用 monodroid 解决)。

更奇怪的是,API 14 中并没有抛出这个错误,只是在 API 8 中。

EmployeeActivity.cs

{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set up Listview
        SetContentView(Resource.Layout.EmployeeMaster);
        employeesAdapter = new EmployeesAdapter(this);
        listView = FindViewById<ListView>(Resource.Id.employees);
        listView.Adapter = employeesAdapter;

        // Dedicate Buttons
        this.FindViewById<Button>(Resource.Id.button_edit).Click += EditButton_Click;
        this.FindViewById<Button>(Resource.Id.button_add).Click += AddButton_Click;
        this.FindViewById<Button>(Resource.Id.button_settings).Click += SettingsButton_Click;

        // Gestures
        gestureDetector = new GestureDetector(this);
        listView.SetOnTouchListener(this);

        var x = employeesAdapter.Count;
    }

void AddButton_Click(object sender, EventArgs e)
    {
        FragmentTransaction trans = this.SupportFragmentManager.BeginTransaction();
        UserProfileFragment userProfileDialog = new UserProfileFragment();
        userProfileDialog.Show(trans, "profile");          
    }
}
...

UserProfileFragment.cs

...
protected void Save()
    {
        String Name = this.Name.Text;
        String Number = this.Number.Text;
        EmployeeManagement.GetInstance().AddEmployee(Name, Number, true);
        EmployeeActivity activity = (EmployeeActivity)this.Activity;
        //activity.Update();
        Dismiss();
    }
...
4

0 回答 0