我有一个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();
}
...