从对话框刷新ListAdapter

时间:2012-12-12 07:28:27

标签: android android-listview xamarin.android android-alertdialog listadapter

我非常难以理解如何刷新一个来自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方法时没有任何反应。

2 个答案:

答案 0 :(得分:1)

因为NotifyDataSetChanged()只是让适配器重绘视图但不会更改基础数据的方法,所以您需要通过调用类似的方式让mainListAdapter知道新数据mainListAdapter.Clear()mainListAdapter.Add() 更新数据或ArrayAdapter的构造函数。

答案 1 :(得分:0)

我废弃了这种方法并改为复制了NotepadV3示例。