2013-07-11 3 views
0

Привет Я пытаюсь разработать приложение, которое запускается для каждого интервала времени, скажем, каждые 1 минуту будет отображаться около Toast message.Как сохранить состояние RadioButton в Android?

Но проблема в том, что я использую функцию RadioButton, но это прекрасно, но когда я нажимаю на одну радиокнопку, она будет зеленой, но когда я закрою и снова открою действие, я получу, поскольку ни одна из переключателей не выбрана.

Вот мой MainActivity.java

public class MainActivity extends Activity { 

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

public void onRadioButtonClicked(View view) { 
    // Is the button now checked? 
    boolean checked = ((RadioButton) view).isChecked(); 

    // Check which radio button was clicked 
    switch(view.getId()) { 
     case R.id.radio_one_min: 
      if (checked) 
      { 
       //some code 
      } 
      break; 
     case R.id.radio_ten_min: 
      if (checked) 
      { 
       //some code 
      } 
      break; 

     case R.id.radio_disable: 
      if (checked) 
      { 
       //some code 
      } 
      break; 
    } 
} 
} 

и вот мой activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:id="@+id/radio"> 
<RadioButton android:id="@+id/radio_disable" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Disable" 
    android:onClick="onRadioButtonClicked"/> 
<RadioButton android:id="@+id/radio_one_min" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="1 minute" 
    android:onClick="onRadioButtonClicked"/> 
<RadioButton android:id="@+id/radio_ten_min" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="10 minute" 
    android:onClick="onRadioButtonClicked"/> 
</RadioGroup> 

Пожалуйста, помогите мне решить эту загадку.

Заранее спасибо ...

+1

я думаю, что это относительное http://stackoverflow.com/questions/151777/saving-activity-state-in-android?rq = 1 –

+0

@Bhavin Nattar Но как использовать 'onSaveInstanceState' и 'onRestoreInstanceState' в моем коде для сохранения состояния« RadioButton ». –

+0

@ChethanShetty: см. Я отправил ответ для вас. –

ответ

1

Этот код используется для хранения состояния ratingbar , Когда мы начинаем новую деятельность, вы будете видеть предыдущий рейтинг состояние ..

package com.example.ratingbar; 

import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.app.Activity; 
import android.content.SharedPreferences; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RatingBar; 
import android.widget.RatingBar.OnRatingBarChangeListener; 
import android.widget.TextView; 
import android.widget.Toast; 

public class RatingbarMainActivity extends Activity { 

RatingBar ratingbarClick; 
Button sub_btn; 
TextView textRatingView , textRatingViewSave; 
Boolean val = true; 
float ans = (float) 0.0; 
//-------------------------------------------------------------------------------------------- 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ratingbar_main); 

    ratingbarClick = (RatingBar) findViewById(R.id.ratingBar1); 
    ratingbarClick.setOnRatingBarChangeListener(rateObj); 


    SharedPreferences sharePref = PreferenceManager.getDefaultSharedPreferences 
      (RatingbarMainActivity.this); 

    ans = sharePref.getFloat("Get_Rating", 0.0f); 
    System.out.println("--------------------------------------ans = " + ans); 
    if(val) { 
     ratingbarClick.setRating(ans); 
    } 
    else { 
     ratingbarClick.setRating(ans); 
    } 

    textRatingView = (TextView) findViewById(R.id.ratingView); 


} 

//-------------------------------------------------------------------------------------------- 
//-------------------------------------------------------------------------------------------- 

    RatingBar.OnRatingBarChangeListener rateObj = new RatingBar.OnRatingBarChangeListener() { 

     @Override 
     public void onRatingChanged(RatingBar ratingBar, float rating,boolean fromUser) { 

      //textRatingView.setText(String.valueOf(rating)); 
      ans = ratingbarClick.getRating(); 

      SharedPreferences sharePref = PreferenceManager.getDefaultSharedPreferences 
          (RatingbarMainActivity.this); 
      SharedPreferences.Editor edit = sharePref.edit(); 
      edit.putFloat("Get_Rating", ans); 
      edit.commit(); 
      val = false; 

     } 
    }; 


//-------------------------------------------------------------------------------------------- 

    } 

--------------------------------------------------------------------------------------------------- 
    activity_ratingbar_main.xml file 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/ratingBar1" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:layout_marginTop="23dp" 
    android:text="Select Your Rating Bar Here" 
    tools:context=".RatingbarMainActivity" /> 

<RatingBar 
    android:id="@+id/ratingBar1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="21dp" 
    android:layout_marginTop="63dp" /> 


<TextView 
    android:id="@+id/ratingView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/ratingBar1" 
    android:text="TextView" /> 

<Button 
    android:id="@+id/button1" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:text="Click To Save Rating In TextBox" /> 

</RelativeLayout> 
0

[Изменено]

я нашел developer.android.com/training/basics/activity-lifecycle/recreating.html документ первый, так что моя первая догадка с помощью Bundles и on Save/Resume Instace State методы. Однако это не работает хорошо.

Вот моя последняя попытка рабочего раствора (с использованием SharedPreferences класса, как это было предложено некоторыми пользователями):

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.RadioButton; 

public class MainActivity extends Activity { 

final String PREFERENCES = "prefs"; 
final String RADIO_BUTTON = "prefsval"; 

SharedPreferences sp; 
Editor e; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sp = this.getSharedPreferences(PREFERENCES, MODE_PRIVATE); 
    e = sp.edit(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (sp != null) { 
     if (sp.getInt(RADIO_BUTTON, 0) != 0) { 
      RadioButton rb; 
      rb = (RadioButton) findViewById(sp.getInt(RADIO_BUTTON, 0)); 
      rb.setChecked(true); 
     } 
    } 
} 

public void onRadioButtonClicked(View view) { 
    e.putInt(RADIO_BUTTON, view.getId()); 
    e.apply(); 
} 
} 
+0

Спасибо за ваш ответ, но, к сожалению, ничего не происходит @ Vlad K. –

+0

@ChethanShetty Я отредактировал свой ответ, теперь должен работать. –

+0

Спасибо за ваше драгоценное время, но, к сожалению, не работает. –

1

это самый простой способ сделать это, нет необходимости в sharedpreference на all.you запутается в то время как используя it.keep вещи простые, как этот

public class MainActivity extends Activity { 
Public static int flag=0; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
if(flag==1) 
radio_one_min.setChecked(true); 
else if(flag==2) 
radio_ten_min.setCheckek(true); 
else if(flag==3) 
radio_disable.setCheckek(true); 

}

public void onRadioButtonClicked(View view) { 
// Is the button now checked? 
boolean checked = ((RadioButton) view).isChecked(); 

// Check which radio button was clicked 
switch(view.getId()) { 
    case R.id.radio_one_min: 
     if (checked) 
     { 
flag =1; 
      //some code 
     } 
     break; 
    case R.id.radio_ten_min: 
     if (checked) 
     { 
    flag=2 ;    
//some code 
     } 
     break; 

    case R.id.radio_disable: 
     if (checked) 
     { 
flag=3; 
      //some code 
     } 
     break; 
} 
} 
} 
+1

Это не сработает, я уже пробовал это до публикации. –

+0

@ChethanShetty вы указали флаг как статический .. я не думаю, что у вас так –

+0

@ChethanShetty это сработало для меня .. просто проверьте, пытались ли вы объявить флаг как статическую переменную –