Сохраненная строка ISharedPreferences обновляется после перезапуска моего приложения

Я передаю строку из действия во фрагмент, все работает отлично, но моя переданная строка не обновляется мгновенно, она обновляется после перезапуска моего приложения. Через поиск Google я попытался изменить свой код «editor.commit» на «editor.apply», но нет используйте, пожалуйста, помогите мне с вашими предложениями, спасибо

Activity.cs

var text = newSentence.ToString();
 ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
 ISharedPreferencesEditor editor = prefs.Edit();
 editor.PutString("Data", text);
 editor.Apply();
 editor.Clear();

Фрагмент.cs

public class Fragment1 : Android.Support.V4.App.Fragment
    {
        public string mString;
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
            mString = prefs.GetString("Data", " ");

        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {

            var view = inflater.Inflate(Resource.Layout.Fragment1, container, false);

            var textView = view.FindViewById<TextView>(Resource.Id.txtView);
            textView.Text = mString;

            return view;
        }
    }

person kiran kumar    schedule 24.09.2019    source источник
comment
удалить редактор.clear();   -  person L2_Paver    schedule 25.09.2019
comment
@L2_Paver Я пытался, но бесполезно   -  person kiran kumar    schedule 25.09.2019
comment
@kiran, есть новости? Пожалуйста, не забудьте отметить мой ответ как ответ, если мой ответ решил вашу проблему, спасибо.   -  person Cherry Bu - MSFT    schedule 25.09.2019


Ответы (1)


Если вы хотите обновить содержимое фрагмента, вы можете отсоединить фрагмент и снова присоединить его.

Вот Fragment1.cs, вам просто нужно использовать событие OnCreateView, оно сработает при запуске кода в manager.BeginTransaction().Detach(frg).Attach(frg).Commit();

public class Fragment1 : Fragment
{
    private TextView tv;
    public string mString;

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);

        ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
        mString = prefs.GetString("Data", " ");
        View v = inflater.Inflate(Resource.Layout.Fragment1,container,false);
        tv = v.FindViewById<TextView>(Resource.Id.textView1);
        tv.Text =mString;
        return v;
    }
}

public class MainActivity : AppCompatActivity
{
    private Button btn1;
    private EditText edit;          
    private static Android.App.FragmentManager manager;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);


        manager = FragmentManager;
        Fragment1 fragment = new Fragment1();
        manager.BeginTransaction().Add(Resource.Id.frameLayout1, fragment,"myfragmanetag").Commit();

        // t.Add(Resource.Id.fragment1,fragment);

        btn1 = FindViewById<Button>(Resource.Id.button1);
        edit= FindViewById<EditText>(Resource.Id.editText1);
        btn1.Click += delegate
          {
              var text =edit.Text.ToString();
              ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
              ISharedPreferencesEditor editor = prefs.Edit();              
              editor.PutString("Data", text);
              editor.Apply();
              //editor.Commit();
              Fragment frg = null;
              frg = manager.FindFragmentByTag("myfragmanetag");
              manager.BeginTransaction().Detach(frg).Attach(frg).Commit();



          };
    }
}

Main.xaml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText android:id="@+id/editText1" android:layout_width="match_parent" 
        android:layout_height="wrap_content" />
<Button android:id="@+id/button1" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" android:text="pass data" />


<FrameLayout android:id="@+id/frameLayout1" android:layout_width="match_parent" 
        android:layout_height="match_parent" />

    </LinearLayout>

Фрагмент1.xaml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/textView1" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:text="this is test" />
   </LinearLayout>
person Cherry Bu - MSFT    schedule 25.09.2019