0

Я использую проверенные виды в моем списке. У меня есть две кнопки переключения, которые при нажатии обновляют пользовательский интерфейс. я хочу сделать свой код таким, чтобы он запоминал ранее выбранное значение, и если он остается тем же самым, кнопка будет отключена, и если она будет изменена, скажем, я переключусь на значение 2, кнопка «Готово» включена и наоборот, а также она запоминает мои предыдущие когда я вернусь к тому же самому представлению позже. Вот мой код для того же:Как мне запомнить мой выбор нажатием кнопки «Готово»?

public class ManageListDashboardFragment extends Fragment implements OnClickListener,OnCheckedChangeListener { 
     public final static String TAG_MANAGE_NEWS_CATEGORIES_FRAGMENT = "ManageListDashboardFragment"; 
     private boolean mIsPersonal = true; 
     private boolean mIsShared = true; 

     private boolean mShouldbeon; 
     private boolean mInitialShouldbeon; 
     private boolean mShouldbeon1; 
     private boolean mInitialShouldbeon1; 
     protected Button mPreferencesDoneButton; 
     final boolean isPersonal = true; 
     final boolean isShared = true; 
     private ListsFragment mListsFragment; 
     ToggleButton one; 
     ToggleButton two; 
     public static ManageListDashboardFragment newInstance(final FragmentManager manager, final int animation) { 
      final ManageListDashboardFragment fragment = new ManageListDashboardFragment(); 
      final Bundle arguments = new Bundle(); 
      arguments.putInt(ANIMATION, animation); 
      fragment.setArguments(arguments); 
      final FragmentInfo fragmentInfo = new FragmentInfo(TransactionMethods.ADD, R.id.manage_news_categories_container); 
      fragmentInfo.setFragmentTag(TAG_MANAGE_NEWS_CATEGORIES_FRAGMENT); 
      FragmentStackManager.getInstance().transitionFragment(manager, fragment, fragmentInfo); 
      return fragment; 
     } 

     @Override 
     public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 
      final View view = inflater.inflate(R.layout.fragment_manage_lists, container, false); 
      final Bundle arguments = getArguments(); 
      final int animation = arguments.getInt(ANIMATION, 0); 
      final ManageListDashboardActivity activity = (ManageListDashboardActivity) getActivity(); 
      if (animation != 0) { 
       activity.animateTitle(R.id.actionbar_title, arguments.getInt(ANIMATION, 0)); 
      } 
      return view; 
     } 
     protected void setupClickListeners() { 
      mIsPersonal = isPersonal; 
      mPreferencesDoneButton = (Button) getActivity().findViewById(R.id.button_done); 
      Typeface face = Typeface.createFromAsset(mPreferencesDoneButton.getContext().getAssets(), 
        "fonts/proxima-nova-regular.ttf"); 
      mPreferencesDoneButton.setTypeface(face); 
      mPreferencesDoneButton.setOnClickListener(this); 
      mPreferencesDoneButton.setEnabled(((ManageListDashboardActivity) getActivity()).isDoneButtonEnabled()); 
     } 
     @Override 
     public void onActivityCreated(final Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      final TextView titleView = (TextView) getActivity().findViewById(R.id.actionbar_title); 
      titleView.setText(R.string.manage_dashboard_lists); 

      initManageListDashboardFragment(); 

     } 

     private void initManageListDashboardFragment() { 
      populateData(); 
      setupClickListeners(); 

      Button personalbutton = (Button) getActivity().findViewById(R.id.button_personal_list); 
      personalbutton.setOnClickListener(this); 
      Button sharedbutton = (Button) getActivity().findViewById(R.id.button_shared_list); 
      sharedbutton.setOnClickListener(this); 
      one = (ToggleButton) getView().findViewById(R.id.personal_list_toggle_control); 
      one.setOnCheckedChangeListener(this); 
      two = (ToggleButton) getView().findViewById(R.id.shared_list_toggle_control); 
      two.setOnCheckedChangeListener(this); 


     } 
     protected void populateData() { 
      SharedPreferencesManager.getInstance().updateIsUserPreferencesUpdated(false); 

     } 


     @Override 
     public void onClick(final View view) { 
      final ManageListDashboardActivity activity = (ManageListDashboardActivity) getActivity(); 

      switch (view.getId()) { 
       case R.id.button_personal_list: 
        mIsPersonal = !mIsPersonal; 
        mIsShared = false; 
        one.setChecked(mIsPersonal); 
        return; 

       case R.id.button_shared_list: 
        mIsPersonal = false; 
        mIsShared = !mIsShared; 
        two.setChecked(mIsShared); 
        return; 


       case R.id.button_done: 
        saveUserPreferences(); 

        DashboardFragment.getInstance().getListsFragment().setIsPersonal(mIsPersonal); 

        break; 

       default: 
        break; 
      } 

      activity.onBackPressed(); 
     } 
     private void saveUserPreferences() { 

      final SharedPreferencesManager manager = SharedPreferencesManager.getInstance(); 
      if (manager.shouldManageListDashboard() == mIsPersonal) { 
       manager.shouldManageListDashboard(); 
      } 


     } 


     protected void toggleDoneButton() { 
      boolean isUserPreferencesUpdated = SharedPreferencesManager.getInstance().isUserPreferencesUpdated(); 
      boolean isDoneEnabled = (
        mShouldbeon != mInitialShouldbeon || mShouldbeon1 != mInitialShouldbeon1 
        || isUserPreferencesUpdated); 
      mPreferencesDoneButton.setEnabled(isDoneEnabled); 
     } 
     public void onUpdate() { 
      mListsFragment.onUpdate(); 
     } 

     @Override 
     public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) { 

      if(isChecked){ 
       if (buttonView == one) { 
         two.setChecked(false); 
        } 
       else if (buttonView == two) { 
         one.setChecked(false); 

        } 
       } 
      switch (buttonView.getId()) { 
       case R.id.personal_list_toggle_control: 

        mShouldbeon = isChecked; 
        if(mShouldbeon = isChecked && mShouldbeon1 != isChecked){ 


        } 
        break; 
       case R.id.shared_list_toggle_control: 

        mShouldbeon1 = isChecked; 
        if(mShouldbeon1 = isChecked && mShouldbeon != isChecked){ 
         } 
        break; 

       default: 
        break; 
      } 
      toggleDoneButton(); 
     } 

    } 
+0

любой пример относительно моего кода? –

+0

Забудьте об этом, я не правильно прочитал вопрос. Задержание для меня! Сожалею. Дай мне попробовать снова. Какая у вас проблема? – Simon

+0

Я просто пытаюсь сохранить выбранные значения в моем фрагменте. Скажем, у меня есть кнопки 1 и button2 с кнопками переключения. По умолчанию я хочу, чтобы кнопка 1 была выбрана, и кнопка была отключена до тех пор, пока я не изменю выбор, выбрав кнопку 2, после чего кнопка будет активирована и после нажатия на нее будет сохранено выбранное значение кнопки (например, в моем случае кнопка2 соответствует true). и цикл повторяется, когда я вернусь к этому представлению, где теперь я бы заметил, что кнопка2 выбрана, и кнопка 1 отменена и нажата кнопка завершения, пока я не изменю свой выбор. –

ответ

1

Я бы порекомендовал вам создать 2 статические переменные в вашем ManageListDashboardFragment, чтобы сохранить текущее состояние ваших togglebuttons. Обновите эти переменные, когда нажата кнопка. И в вашем initManageListDashboardFragment() обновите состояние вашей кнопки переключения в соответствии с текущими значениями статической переменной. Конечно, статическое значение переменной сохраняется только до тех пор, пока ваше приложение работает. Если вы хотите, чтобы ваши состояния сохранялись даже в разных экземплярах вашего приложения, используйте SharedPreference вместо статических переменных.

Пример SharedPreferance: -

public class ManageListDashboardFragment extends Fragment implements OnClickListener,OnCheckedChangeListener { 
    public final static String TAG_MANAGE_NEWS_CATEGORIES_FRAGMENT = "ManageListDashboardFragment"; 
    private boolean mIsPersonal = true; 
    private boolean mIsShared = true; 
    private SharedPreferences sp; 
    private boolean mShouldbeon; 
    private boolean mInitialShouldbeon; 
    private boolean mShouldbeon1; 
    private boolean mInitialShouldbeon1; 
    protected Button mPreferencesDoneButton; 
    final boolean isPersonal = true; 
    final boolean isShared = true; 
    private ListsFragment mListsFragment; 
    ToggleButton one; 
    ToggleButton two; 
    public static ManageListDashboardFragment newInstance(final FragmentManager manager, final int animation) { 
     final ManageListDashboardFragment fragment = new ManageListDashboardFragment(); 
     final Bundle arguments = new Bundle(); 
     arguments.putInt(ANIMATION, animation); 
     fragment.setArguments(arguments); 
     final FragmentInfo fragmentInfo = new FragmentInfo(TransactionMethods.ADD, R.id.manage_news_categories_container); 
     fragmentInfo.setFragmentTag(TAG_MANAGE_NEWS_CATEGORIES_FRAGMENT); 
     FragmentStackManager.getInstance().transitionFragment(manager, fragment, fragmentInfo); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.fragment_manage_lists, container, false); 
     final Bundle arguments = getArguments(); 
     final int animation = arguments.getInt(ANIMATION, 0); 
     final ManageListDashboardActivity activity = (ManageListDashboardActivity) getActivity(); 
     if (animation != 0) { 
      activity.animateTitle(R.id.actionbar_title, arguments.getInt(ANIMATION, 0)); 
     } 
     return view; 
    } 
    protected void setupClickListeners() { 
     mIsPersonal = isPersonal; 
     mPreferencesDoneButton = (Button) getActivity().findViewById(R.id.button_done); 
     Typeface face = Typeface.createFromAsset(mPreferencesDoneButton.getContext().getAssets(), 
       "fonts/proxima-nova-regular.ttf"); 
     mPreferencesDoneButton.setTypeface(face); 
     mPreferencesDoneButton.setOnClickListener(this); 
     mPreferencesDoneButton.setEnabled(((ManageListDashboardActivity) getActivity()).isDoneButtonEnabled()); 
    } 
    @Override 
    public void onActivityCreated(final Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     final TextView titleView = (TextView) getActivity().findViewById(R.id.actionbar_title); 
     titleView.setText(R.string.manage_dashboard_lists); 

     initManageListDashboardFragment(); 

    } 
    Button sharedbutton; 
    Button personalbutton; 
    private void initManageListDashboardFragment() { 
     populateData(); 
     setupClickListeners(); 
     sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 


     personalbutton = (Button) getActivity().findViewById(R.id.button_personal_list); 
     personalbutton.setOnClickListener(this); 
     sharedbutton = (Button) getActivity().findViewById(R.id.button_shared_list); 
     sharedbutton.setOnClickListener(this); 
     one = (ToggleButton) getView().findViewById(R.id.personal_list_toggle_control); 
     one.setOnCheckedChangeListener(this); 
     boolean toogle = sp.getBoolean("toggle", true); 
     two = (ToggleButton) getView().findViewById(R.id.shared_list_toggle_control); 
     two.setOnCheckedChangeListener(this); 
     if(toogle) {  
     one.setChecked(true); 
     } 
     else { 
     two.setChecked(true); 
     } 

    } 
    protected void populateData() { 
     SharedPreferencesManager.getInstance().updateIsUserPreferencesUpdated(false); 

    } 


    @Override 
    public void onClick(final View view) { 
     final ManageListDashboardActivity activity = (ManageListDashboardActivity) getActivity(); 

     switch (view.getId()) { 
      case R.id.button_personal_list: 
       mIsPersonal = !mIsPersonal; 
       mIsShared = false; 
       one.setChecked(mIsPersonal); 

       sp.edit().putBoolean("toggle", mIsPersonal).commit(); 
       return; 

      case R.id.button_shared_list: 
       mIsPersonal = false; 
       mIsShared = !mIsShared; 
       two.setChecked(mIsShared); 
       sp.edit().putBoolean("toggle", !mIsShared).commit(); 
       return; 


      case R.id.button_done: 
       saveUserPreferences(); 

       DashboardFragment.getInstance().getListsFragment().setIsPersonal(mIsPersonal); 

       break; 

      default: 
       break; 
     } 

     activity.onBackPressed(); 
    } 
    private void saveUserPreferences() { 

     final SharedPreferencesManager manager = SharedPreferencesManager.getInstance(); 
     if (manager.shouldManageListDashboard() == mIsPersonal) { 
      manager.shouldManageListDashboard(); 
     } 


    } 


    protected void toggleDoneButton() { 
     boolean isUserPreferencesUpdated = SharedPreferencesManager.getInstance().isUserPreferencesUpdated(); 
     boolean isDoneEnabled = (
       mShouldbeon != mInitialShouldbeon || mShouldbeon1 != mInitialShouldbeon1 
       || isUserPreferencesUpdated); 
     mPreferencesDoneButton.setEnabled(isDoneEnabled); 
    } 
    public void onUpdate() { 
     mListsFragment.onUpdate(); 
    } 

    @Override 
    public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) { 

     if(isChecked){ 
      if (buttonView == one) { 
        two.setChecked(false); 
        personalbutton.setEnabled(false); 
        sharedbutton.setEnabled(true); 
        one.setEnabled(false); 
        two.setEnabled(true); 
        sp.edit().putBoolean("toggle", true).commit(); 
       } 
      else if (buttonView == two) { 
        one.setChecked(false); 
        personalbutton.setEnabled(true); 
        sharedbutton.setEnabled(false); 
        two.setEnabled(false); 
        one.setEnabled(true); 
        sp.edit().putBoolean("toggle", false).commit(); 
       } 
      } 
     switch (buttonView.getId()) { 
      case R.id.personal_list_toggle_control: 

       mShouldbeon = isChecked; 
       if(mShouldbeon = isChecked && mShouldbeon1 != isChecked){ 


       } 
       break; 
      case R.id.shared_list_toggle_control: 

       mShouldbeon1 = isChecked; 
       if(mShouldbeon1 = isChecked && mShouldbeon != isChecked){ 
        } 
       break; 

      default: 
       break; 
     } 
     toggleDoneButton(); 
    } 

} 
+0

Я хотел бы использовать sharedpreferences, но не уверен, как. Можете ли вы объяснить код для моего случая? –

+0

Я обновил ваш код в своем ответе. Пожалуйста, проверьте – AnswerBot

+0

спасибо! Это сработало для переключения 2 и переключения 1, но как только я сохраню переключатель 1, приложение выйдет из строя, и по умолчанию оно должно показать, что переключатель 1 щелкнул, когда при первом запуске приложения (в дальнейшем по умолчанию будут использоваться общие префы), я могу настроить его для переключения 1 при первом запуске без проверки: true в xml, чтобы у меня было динамическое поведение? –

Смежные вопросы