Ich bin sehr neu für Android-Programmierung, und ich bin nicht in der Lage den akzeptierten Weg, um herauszufinden, was mein Ziel zu erreichen ist:Was ist der beste Weg, um eine Variable mit Optionsfeldern zu steuern?
ich eine Variable in meiner Haupttätigkeit habe (sortOrder
), die ich festlegen mag Verwenden von Optionsfeldern in einer anderen Aktivität. Im Moment ändere ich einfach MainActivity.sortOrder von der anderen Aktivität mit einem großen Schaltergehäuse, also frage ich mich, ob es einen eleganteren Weg gibt.
Auch im Moment "vergessen" die Radiobuttons ihre Wahl, wenn ich zu MainActivity zurückkehre. Ist es möglich, das ausgewählte Optionsfeld zu speichern und die Variable in MainActivity zu setzen?
Hier einige Code:
in MainActivity
:
public static String sortOrder;
public static int checkedId;
Diese werden angegebenen Werte in onCreate
:
sortOrder = ShipContract.ShipEntry.COLUMN_NAME_NAME + " ASC";
checkedId = R.id.sort_name;
Und hier ist OptionsSort
, die von MainActivity
gestartet wird:
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();
}
}
Mal sehen, ob ich dein Problem verstehe - du hast 2 Aktivitäten. Und im zweiten gibt es eine Logik, die ** sortOrder ** ändert und basierend auf dem Wert in ** sortOrder ** den Status eines RadioButtons ändern soll, richtig? –
Ja. Was ich jetzt gemacht habe, ist das Speichern der ID des ausgewählten RadioButtons in MainActivity und das Verwenden von setChecked in der zweiten Aktivität onCreate. Aber es fühlt sich immer noch sehr haschisch an. – MadTux
Ja, es ist hackisch (keine Ärger) Kannst du bitte deinen Code zu der Frage hinzufügen, damit wir ihn besser sehen können? –