2016-06-26 23 views
0

我很新到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(); 
} 

}

+0

让我们看看我是否理解你的问题 - 你有2个活动。而在第二个有一个逻辑改变** sortOrder **并基于一个** sortOrder **中的值你想改变一个RadioButton的状态,对吧? –

+0

是的。我现在所做的是将所选RadioButton的ID保存在MainActivity中,并在第二个Activity的onCreate中使用setChecked。但它仍然感觉非常hackish .. – MadTux

+0

是的,它是hackish(没有冒犯)你可以请添加你的代码的问题,所以我们可以有一个更好的看看吗? –

回答

0

到目前为止,我理解你的问题,你想从活动B都sortOder值,并把它的活动A.This可以,如果你startActivityForResult而且在活动B当一切完成实现公正调用setresult方法并给出结果的意图并完成此活动B. 在活动A中,您必须重写onActivityResult并处理活动B的结果。

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

@Override

公共无效onActivityResult(INT requestCode,INT发送resultCode,Intentdata){ super.onActivityResult(requestCode,resultCode为,数据);

if (resultCode == Activity.RESULT_OK) { 

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

}

和b活动时排序顺序在一个变量中将sortOrder = “byDate” 被选择

只是存储值; (),new Intent()。putExtra(“sortOrder”,sortOrder));如果你想要返回一个新的Intent()。 finish();

相关问题