Android studio - 如何保存以前活动中选择的数据

时间:2018-03-01 18:54:26

标签: java android android-studio

这是我的代码片段。 Textview充当按钮,并在其上显示Onclicklistner。点击cpu1000 Textview后会转到cpu_g1000类,代码如下所示。

public class Game_1000 extends AppCompatActivity implements View.OnClickListener{

private TextView cpu1000, mobo1000;

TextView cpu, mobo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game_1000);

    cpu1000 = (TextView) findViewById(R.id.proName_G1);
    mobo1000 = (TextView) findViewById(R.id.moboName_G1);

    cpu1000.setOnClickListener(this);
    mobo1000.setOnClickListener(this);

    cpu = (TextView) findViewById(R.id.proNameG1000);
    cpu.setText(getIntent().getStringExtra("Processor"));

    mobo = (TextView) findViewById(R.id.moboNameG1000);
    mobo.setText(getIntent().getStringExtra("Motherboard"));
}

@Override
public void onClick(View v) {

    if (v == cpu1000) {
        opencpu_g1000();
    }
    else if (v == mobo1000) {
        openmobo_g1000();
    }
}

public void opencpu_g1000() {
    Intent intent = new Intent(this, cpu_g1000.class);
    startActivity(intent);
}

public void openmobo_g1000() {
    Intent intent = new Intent(this, mobo_g1000.class);
    startActivity(intent);
}

在本课程中,有单选按钮。用户选择其中一个选项,选择更改为字符串。字符串将发送回Game_1000课程。然后,字符串将替换为“选择处理器”以显示新选项。我遇到的问题是,当我选择主板时,处理器选择将恢复为“选择处理器”,主板选择显示。我需要同时展示。

public class cpu_g1000 extends AppCompatActivity {

Button button_save;
RadioGroup rG;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cpu_g1000);

    button_save = (Button) findViewById(R.id.Save_G1_cpu);
    rG = (RadioGroup) findViewById(R.id.cpu_RadioGrp);
    tv = (TextView) findViewById(R.id.proNameG1000);

    button_save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            int selected_cpu = rG.getCheckedRadioButtonId();
            RadioButton selectedRadioButton = (RadioButton) findViewById(selected_cpu);

            String radioValue = selectedRadioButton.getText().toString();

            Intent intent = new Intent(cpu_g1000.this, Game_1000.class);
            intent.putExtra("Processor", radioValue);
            startActivity(intent);

        }

    });
}

选择处理器:

Processor is chosen

选择主板:

Motherboard is chosen

选择示例:

Example of choices

之前的选择没有被记录,当做出新选择时,之前的选择将恢复为“请选择处理器”,但我需要显示这两个信息。在我的原始代码中,我有两个以上的选择,但我缩短了它以便于阅读。

3 个答案:

答案 0 :(得分:1)

通过调用startActivityForResult(...)开始您的第二个(选择)活动,然后当用户完成交互时,在Intent中设置您选择的数据,并将该意图传递给具有所需结果的方法{{1}然后在第二个活动上调用完成。

完成第二项活动后,您将在第一项活动的setResult(...)方法中收到意向数据,从意图中提取该数据,然后将其显示给用户。

More Description

Example

答案 1 :(得分:0)

尝试使用Shared Preference。这是一个很好的tutorial

答案 2 :(得分:0)

对于您的场景,您需要做的是保存处理器和主板选择结果,或将数据从一个活动发送到另一个活动。在处理器选择之后,您将返回Game_1000活动,您可以使用startActivityForResult。此方法将结果发送回通过Intent调用Activity。这意味着如果您从cpu_g1000活动中调用Game_1000活动,选择处理器后,您可以将结果发回Game_1000活动。 Game_1000活动将以onActivityResult方法获得结果。

示例:

cpu_g1000活动中Game_1000开始public void opencpu_g1000() { Intent intent = new Intent(this, cpu_g1000.class); startActivityForResult(intent, PROCESSOR_SELECTION_CODE); } 活动。

cpu_g1000

Game_1000活动中,将结果设置为意图并发送回 button_save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int selected_cpu = rG.getCheckedRadioButtonId(); RadioButton selectedRadioButton = (RadioButton) findViewById(selected_cpu); String radioValue = selectedRadioButton.getText().toString(); Intent resultIntent = new Intent(); // TODO Add data to send back resultIntent.putExtra("ProcessorSelection", radioValue); setResult(Activity.RESULT_OK, resultIntent); // finishing this activity finish(); } }); 活动

Game_1000

cpu_g1000活动中,通过覆盖startActivityForResult方法获取从@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case (PROCESSOR_SELECTION_CODE) : { if (resultCode == Activity.RESULT_OK) { // TODO Extract the data returned from the child Activity. String radioValue = data.getStringExtra("ProcessorSelection"); // save the result value and update UI } break; } } } 活动发送的值。

mobo_g1000

对于Game_1000活动,使用相同的过程将结果返回到mobo_g1000活动中。使用onActivityResult开始Game_1000活动,并获取case活动startActivityForResult方法中的值。您必须在onActivityResult方法中为mobo_g1000活动添加另一个{{1}}。

检查onActivityResultthis链接,以便更好地了解这项工作的方式。