我非常难以理解如何刷新一个来自AlertDialog的活动中的ListAdapter我正在从同一个活动中调用。
以下是活动的代码:
private static ArrayAdapter<CarProfile> mainListAdapter;
public class CarProfiles : ListActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
mainListAdapter = new ArrayAdapter<CarProfile>(this, Android.Resource.Layout.SimpleListItem1, carProfiles);
// This targets a ListView in my axml with id list.
ListAdapter = mainListAdapter;
ShowCarProfileFormDialog(parameters blah, blah, blah);
}
}
这是我的AlertDialog:
public class CarProfileDialogFragment : DialogFragment
{
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
LayoutInflater inflater = Activity.LayoutInflater;
View view = inflater.Inflate(Resource.Layout.CarProfileForm, null);
// component init (removed)
var builder = new AlertDialog.Builder(Activity)
.SetView(view)
.SetPositiveButton(GetString(Resource.String.lblCarProfileDialogOK), (sender, args) =>
{
// The datasouce source update works
datasource.UpdateCarProfile(id, txtName.Text, txtPlateNumber.Text, spnCategoryColor.SelectedItem.ToString(), spnCategoryNumber.SelectedItem.ToString());
// But this doesn't
mainListAdapter.NotifyDataSetChanged();
})
.SetNegativeButton(GetString(Resource.String.lblCarProfileDialogCancel), (sender, args) =>
{
Dialog.Dismiss();
})
.SetTitle(GetString(Resource.String.lblCarProfileDialogTitle));
return builder.Create();
}
}
上面的AlertDialog代码中显示,我的数据更新没有任何问题,当我调用NotifyDataSetChanged
方法时没有任何反应。
答案 0 :(得分:1)
因为NotifyDataSetChanged()
只是让适配器重绘视图但不会更改基础数据的方法,所以您需要通过调用类似的方式让mainListAdapter
知道新数据mainListAdapter.Clear()
,mainListAdapter.Add()
更新数据或ArrayAdapter
的构造函数。
答案 1 :(得分:0)
我废弃了这种方法并改为复制了NotepadV3示例。