【问题标题】:What is the best way to control a variable with radio buttons?使用单选按钮控制变量的最佳方法是什么?
【发布时间】: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


【解决方案1】:

到目前为止,我了解您的问题,您想从活动 B 中获取 sortOder 值并将其带到活动 A。如果您在 startActivityForResult 和活动 B 中完成所有操作,只需调用 setresult 方法并提供它即可实现产生的意图并完成此活动 B. 在活动 A 中,您必须覆盖 onActivityResult 并处理活动 B 的结果。

喜欢 startActivityForResult(new Intent(this,ActivityB.class),123);

@Override

public void onActivityResult(int requestCode, int resultCode, Intentdata) { super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK) {

if (requestCode==123)
    {
      String sordData= data.getStringExtra("sortOrder","byName")
            sortYourDAta(sordData);
    }
}

}

在活动 b 中选择排序顺序时

只需将值存储在变量 sortOrder="byDate";

和 onbackpressed 或者当你想回去时只需调用它 setResult(123,new Intent().putExtra("sortOrder",sortOrder)); 完成();

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 2013-12-10
    • 2011-11-04
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多