0

同じアクティビティから呼び出している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メソッドを呼び出しても何も起こりません。

4

2 に答える 2

1

NotifyDataSetChanged()これは、アダプタにビューを再描画させるための単なる方法ですが、基になるデータは変更しないため、、などをmainListAdapter呼び出してデータまたはのコンストラクタを再度更新することにより、新しいデータを通知する必要があります。mainListAdapter.Clear()mainListAdapter.Add()ArrayAdapter

于 2012-12-12T18:55:57.313 に答える
0

このアプローチを廃止し、代わりにNotepadV3の例をコピーしました。

于 2012-12-22T12:52:50.233 に答える