2016-06-26 8 views
0

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(); 
} 

}

+0

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? –

+0

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

+0

Ja, es ist hackisch (keine Ärger) Kannst du bitte deinen Code zu der Frage hinzufügen, damit wir ihn besser sehen können? –

Antwort

0

so weit ich verstehe Ihr Problem Sie sortOder Wert von Aktivität B und bringen es auf Aktivität A.This nehmen wollen erreicht werden können, wenn Sie startActivityForResult und in Aktivität B da, wenn Sie mit allem, was getan werden einfach Rufen Sie die Methode "setresult" auf und geben Sie die resultierende Absicht ein und beenden Sie diese Aktivität B. In Aktivität A müssen Sie onActivityResult überschreiben und das Ergebnis von Aktivität B verarbeiten.

wie startActivityForResult (neue Absicht (this, ActivityB.class), 123);

@Override

public void onActivityResult (int requestCode, int Result, Intentdata) { super.onActivityResult (requestCode, Resultcode, Daten);

if (resultCode == Activity.RESULT_OK) { 

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

}

und in der Aktivität, wenn b Sortierung

nur Speicherwert in eine Variable sortOrder = "byDate" ausgewählt ist;

und onbackpressed oder wann immer Sie zurückgehen möchten rufen Sie einfach setResult (123, neue Intent(). PutExtra ("sortOrder", sortOrder)); Ende();

Verwandte Themen