2016-08-27 19 views
0

세 개의 라디오 버튼이 하나만있는 메뉴 항목으로 표시되며 앱을 닫더라도 선택 사항이 저장됩니다. 그들이 선택한 선택 사항은 앱 시작시 표시 할 레이아웃 단편을 결정하는 데 사용됩니다.SharedPreferences를 사용하는 메뉴의 라디오 버튼

공유 환경 설정에서 사용자 선택 사항을 저장하는 방법을 실제로 이해하지 못합니다. 이전에 코딩을 사용 해보지 않았고 코딩에 익숙하지 않았기 때문입니다.

내 메뉴 레이아웃은 사용자가 항목을 클릭 할 때 트리거 것 콜백이 필요합니다

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@+id/settings" 
    android:title="@string/settings"> 
    <menu > 
     <group android:id="@+id/startScreenGroup" android:checkableBehavior="single"> 
      <item android:id="@+id/submenu0" android:title="Fragment 0" /> 
      <item android:id="@+id/submenu1" android:title="Fragment 1" /> 
      <item android:id="@+id/submenu2" android:title="Fragment 2" /> 
     </group> 
    </menu> 
</item> 

</menu> 
+0

그래서 radio1이 선택되면 조각 1이 열리는 등의 구현을 원합니까? – sushildlh

+0

비슷한 질문 [여기] (http://stackoverflow.com/a/38804274/3472667) – Hoven

답변

1

다음 코드는, 그것은 테스트 아니에요하지만 기본적으로이 그것은 일반적 것이 얼마나입니다보십시오, 내가 경우 알려 주시기 바랍니다 내 코드를 시도 할 때 발생하는 오류가 있습니다. 내가 마지막으로이 작업을하는 데 시간을 가지고

private RadioGroup radioGroup; 
private RadioButton radioButton; 

//Fragment references 
private Fragment0 fragment0; 
private Fragment1 fragment1; 
private Fragment2 fragment2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_location_detail); 

     //Create a SharedPreference variable 
     SharedPreferences appPreferences = this.getSharedPreferences("YOUR APP PACKAGE NAME", Context.MODE_PRIVATE); 


     final RadioGroup radioGroup = (RadioGroup)findViewById(R.id.startScreenGroup); 
     radioGroup.setOnChangedListener(new RadioGroup.OnChangedListener() { 

      @Override 
     void onCheckedChanged(RadioGroup group, int checkedId) { 

      switch (checkedId) { 

      case R.id.submenu0: 
       appPreferences.edit().putString("LoadFragment","submenu0"); 
       break; 
      case R.id.submenu1: 
       appPreferences.edit().putString("LoadFragment","submenu1"); 
       break; 
      case R.id.submenu2: 
       appPreferences.edit().putString("LoadFragment","submenu2"); 
       break; 
      } 

     appPreferences.commit();   
    } 
}); 


     //get menuID 
     String fragmentToLoad = appPreferences.getString("LoadFragment",""); 

     //load user selected fragment 
     if(fragmentToLoad != null){ 

     switch(fragmentToLoad){ 
      case "submenu0" : 
      this.getSupportFragmentManager().beginTransaction() 
       .replace(R.id.container_main, fragment0) 
       .commit(); 
       break; 

     case "submenu1" : 
     this.getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container_main, fragment1) 
      .commit(); 
      break; 

     case "submenu2" : 
     this.getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container_main, fragment2) 
      .commit(); 
       break; 
     } 
    } 


} 

UPDATE는 100 % 작업과 2 개 휴대폰 (롤리팝 및 산들 장치) 테스트.

public class MainActivity extends AppCompatActivity { 

    SharedPreferences appPreferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Create a SharedPreference variable 
     appPreferences = this.getSharedPreferences("com.example.ramithrd.radiobuttonssharedpref", Context.MODE_PRIVATE); 

     //get menuID 
     String fragmentToLoad = appPreferences.getString("LoadFragment",""); 

     //load user selected fragment 
     if(fragmentToLoad != null){ 

      switch(fragmentToLoad){ 
       case "submenu0" : 
        this.getSupportFragmentManager().beginTransaction() 
          .replace(R.id.container_main, new Fragment0()) 
          .commit(); 
        break; 

       case "submenu1" : 
        this.getSupportFragmentManager().beginTransaction() 
          .replace(R.id.container_main, new Fragment1()) 
          .commit(); 
        break; 

       case "submenu2" : 
        this.getSupportFragmentManager().beginTransaction() 
          .replace(R.id.container_main, new Fragment2()) 
          .commit(); 
        break; 
      } 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     if (id == R.id.submenu0) { 
      appPreferences.edit().putString("LoadFragment","submenu0").commit(); 
      this.getSupportFragmentManager().beginTransaction() 
        .replace(R.id.container_main, new Fragment0()) 
        .commit(); 

     } else if (id == R.id.submenu1) { 
      appPreferences.edit().putString("LoadFragment","submenu1").commit(); 
      this.getSupportFragmentManager().beginTransaction() 
        .replace(R.id.container_main, new Fragment1()) 
        .commit(); 
     } else if (id == R.id.submenu2){ 
      appPreferences.edit().putString("LoadFragment","submenu2").commit(); 
      this.getSupportFragmentManager().beginTransaction() 
        .replace(R.id.container_main, new Fragment2()) 
        .commit(); 
     } 


     return super.onOptionsItemSelected(item); 
    } 
} 
+0

시도했지만 라디오 수신기에서 널 포인트 예외가 발생했습니다. 내 라디오 버튼이 메뉴 안에 들어 있기 때문일까? 또한 조각을 위해 호출기 어댑터를 사용하고 있습니다. 처음에는 viewPager.setCurrentItem (1); 특정 페이지를로드하고 사용자 입력을 기반으로 공유 된 기본 설정에서 1을 정수로 바꿀 수 있다고 생각했습니다. – DC5Gator

+0

매력처럼 작동합니다! 감사! – DC5Gator

0

라디오 그룹입니다. 해당 콜백에서 클릭 된 값을 SharedPreference에 저장할 수 있습니다. 당신의 활동의 onCreate() 방법에서

  1. , 당신의 RadioGroup을 찾아 그에게 OnCheckedChangedListener을 지정합니다.
  2. 청취자 onCheckChanged() 메서드에서 사용자가 클릭 한 항목을 확인하십시오.
  3. SharedPreferences.Editor을 사용하여 디스크에 저장하십시오.
는 는

같은 것을 (하지 준수 또는 테스트) 모양 귀하의 코드 :

public void onCreate(final Bundle savedInstanceBundle) { 

    final RadioGroup radioGroup = (RadioGroup) findViewById(R.id.startScreenGroup); 
    radioGroup.setOnChangedListener(new RadioGroup.OnChangedListener() { 
     @Override 
     void onCheckedChanged(RadioGroup group, int checkedId) { 
      SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit(); 
      switch (checkedId) { 
       case R.id.submenu0: 
        editor.putString("my_key", "menu0"); 
        break; 
       case R.id.submenu1: 
        editor.putString("my_key", "menu1"); 
        break; 
       case R.id.submenu2: 
        editor.putString("my_key", "menu2"); 
        break; 
      } 
      editor.commit();   
     } 
    }); 

}