【发布时间】:2016-10-28 11:35:56
【问题描述】:
我对 Android 编程非常陌生,我无法找出达到我目标的公认方法是什么:
我的主要活动 (sortOrder) 中有一个变量,我想在其他活动中使用单选按钮设置它。目前,我只是用一个大开关盒将 MainActivity.sortOrder 从另一个活动中更改,所以我想知道是否有更优雅的方式。
此外,当我返回 MainActivity 时,单选按钮“忘记”了他们的选择。是否可以保存选定的单选按钮,并在 MainActivity 中设置变量?
这里有一些代码:
在MainActivity:
public static String sortOrder;
public static int checkedId;
这些是onCreate中的给定值:
sortOrder = ShipContract.ShipEntry.COLUMN_NAME_NAME + " ASC";
checkedId = R.id.sort_name;
这里是OptionsSort,是从MainActivity开始的:
public class OptionsSort extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options_sort);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
RadioButton checkedButton = (RadioButton) findViewById(MainActivity.checkedId);
checkedButton.setChecked(true);
}
public void onRadioButtonClicked(View view) {
boolean checked = ((RadioButton) view).isChecked();
switch(view.getId()) {
case R.id.sort_name:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_NAME + " ASC";
break;
case R.id.sort_date:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_DATE + " ASC";
break;
case R.id.sort_capacity:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_CAPACITY + " ASC";
break;
case R.id.sort_line:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_LINE + " ASC";
break;
case R.id.sort_displacement:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_DISPLACEMENT + " ASC";
break;
case R.id.sort_speed:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_SPEED + " ASC";
break;
case R.id.sort_power:
if (checked)
MainActivity.sortOrder = ShipContract.ShipEntry.COLUMN_NAME_POWER + " ASC";
break;
}
RadioGroup radiogroup = (RadioGroup) findViewById(R.id.sort_group);
MainActivity.checkedId = radiogroup.getCheckedRadioButtonId();
finish();
}
}
【问题讨论】:
-
让我们看看我是否理解您的问题 - 您有 2 个活动。在第二个中,有一个逻辑会更改 sortOrder 并基于 sortOrder 中的值,您想更改 RadioButton 的状态,对吗?
-
是的。我现在所做的是将所选 RadioButton 的 id 保存在 MainActivity 中,并在第二个活动的 onCreate 中使用 setChecked。但它仍然感觉很hackish ..
-
是的,它是骇人听闻的(没有冒犯)您能否将您的代码添加到问题中,以便我们更好地查看它?
-
@MadTux 您必须将您的
RadioButton选择存储在SharedPreference中,以便在其他Activity中如果您不设置它,那么您可以。 -
@Ironman 谢谢,我去看看..
标签: android radio-button material-design