【问题标题】:Radio Button selections are not stored Android单选按钮选择不存储 Android
【发布时间】:2013-08-06 04:24:38
【问题描述】:

我创建了一个带有单选按钮的警报对话框,当我选择单选按钮曲目列表时,它不会记住下一次选择期间的曲目,因此我无法知道当前正在播放哪个曲目。 int currentselection = -1; 请检查代码并告诉我我的代码是否有问题。在此先感谢..

public class MainActivity extends Activity {
Button b1;
int currentselection = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b1 = (Button) findViewById(R.id.button1);
    final CharSequence[] items = { "Track #1", "Track #2","Track #3" };

    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Select Track");
    builder.setIcon(R.drawable.ic_launcher);

    builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    }); 
    builder.setSingleChoiceItems(items, currentselection,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface mdialog, int item) {
                    // TODO Auto-generated method stub
                    switch (item) {
                    case 0:
                        currentselection = 0;
                        Toast.makeText(getApplicationContext(),
                                items[item], Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        currentselection = 1;
                        Toast.makeText(getApplicationContext(),
                                items[item], Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        currentselection = 2;
                        Toast.makeText(getApplicationContext(),
                                items[item], Toast.LENGTH_SHORT).show();
                        break;
                    }
                    mdialog.cancel();
                }
            });
    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            AlertDialog alert = builder.create();
            alert.show();
        }
    });
}

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

}

【问题讨论】:

  • “不记得”是什么意思?
  • @Dany Joumaa 它不会显示列表中先前选择的项目。

标签: android radio-button switch-statement android-alertdialog


【解决方案1】:

您需要将其存储到数据库、存储或使用静态变量并在用户更改单选框时更改变量的值。

干杯,

【讨论】:

  • 你能解释一下静态变量吗??
  • 仅用于存储小值,不应按照 android 指南使用数据库。共享偏好是最好和最简单的方法..
  • @SaiKiran 您可以按照 Sushil 方法,实际上,它会很好地工作,并且对于 android dev 看起来非常一致。关于我所说的静态 val,您可以将其声明为一个单独的类。我不记得确切,但它类似于 public static String MY_VAL = "";
【解决方案2】:
Radio button does not preserve value. So you loose them after exiting. You can handle radio button scenario in combination with sharedpreferences.

After setting radio button add it to shared preferences like:

 private RadioButton mWifiDataButton = null;
 private RadioButton mWifiButton = null;

in onCreate() .. 

 mWifiDataButton = (RadioButton) findViewById(R.id.radio_wifi_data);
 mWifiDataButton.setOnClickListener(this);

 mWifiButton = (RadioButton) findViewById(R.id.radio_wifi_only);
 mWifiButton.setOnClickListener(this);



Editor ed = pref.edit();
ed.putBoolean("pref_radio_wifidata",mWifiDataButton.isChecked());
ed.putBoolean("pref_radio_wifi",mWifiButton.isChecked());

and next time retrieve the values like this:

mWifiDataButton.setChecked(pref.getBoolean("pref_radio_wifidata", true));
mWifiButton.setChecked(pref.getBoolean("pref_radio_wifi", false));



Then in onClick() handle it properly:

 @Override
    public void onClick(View v) {
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        switch(v.getId()){


            case R.id.radio_wifi_data:
                pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                boolean wifidataState = pref.getBoolean("pref_radio_wifidata", true);
                mWifiDataButton.setChecked(!wifidataState);
                mWifiButton.setChecked(wifidataState);
                Editor ed = pref.edit();
                ed.putBoolean("pref_radio_wifidata", !wifidataState);
                ed.putBoolean("pref_radio_wifi", wifidataState);
                ed.commit();
                break;
            case R.id.radio_wifi_only:
                pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                boolean wifiState = pref.getBoolean("pref_radio_wifi", false);
                mWifiButton.setChecked(!wifiState);
                mWifiDataButton.setChecked(wifiState);
                Editor ed1 = pref.edit();
                ed1.putBoolean("pref_radio_wifi", !wifiState);
                ed1.putBoolean("pref_radio_wifidata", wifiState);
                ed1.commit();
                break;

ed.commit();

【讨论】:

  • 嗨 Sai.. 如果任何答案解决了您的目的,请接受答案,以便其他人可以通过轻松获得正确答案而受益。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2012-12-30
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多