如何获得旧的活动窗口

问题描述 投票:0回答:3

我将在基本情况下解释我的问题。假设我有2个活动,A和B,它们都有一个EditText和一个Button。按钮是用来在活动之间导航的。EditTexts是用来保存数据的。假设在两个活动中都填充了EditTexts,但是当我点击任何一个按钮时,我不想丢失EditTexts的数据。我为按钮设置了onClickListener()方法。

对于A中的按钮:

Intent intent=new Intent(A.this, B.class);
startActivity(intent);

对于B中的按钮,我有一个onClickListener()方法

Intent intent=new Intent(B.this, A.class);
startActivity(intent);

但是当我点击按钮时,EditTexts文本消失了。我需要帮助保留数据。先谢谢大家的回复。

android android-intent android-activity android-edittext android-button
3个回答
1
投票

如果你只是想在2个活动之间来回翻转,你可以做如下操作。

当你想从 AB这样做。

Intent intent=new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这将把一个现有的 B 并将其重新排列,使其现在位于任务栈的顶部(即:显示给用户)。现有的 A 现在是在它的下面。

B,要去 A修改代码,并添加同样的附加行,以增加以下内容 REORDER_TO_FRONT 标志。

将数据保存在 EditText 并不是一个好的或强大的 "持久性 "解决方案,但对于简单的应用来说,它当然可以用于此。


0
投票

不要在开始其他活动的时候调用finit. 然后,原始活动将留在活动堆栈中,编辑文本中的数据仍将保留在活动中。否则您应该使用 SharedPreferences 来存储您离开活动时需要保留的任何临时数据。然后使用 SharedPreferences.

public class A extends Activity implements OnClickListener{
     private Button nextBtn;
     private EditText editText;
     private String store;

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.create_data);
         editText = findViewById(/*edit text id*/);
         nextBtn = findViewById(/*button id*/);
         nextBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
         store = editText.getText().toString();

    switch(v.getId()) {
        case /*your button id*/:
        Intent c = new Intent(this, B.class);
        startActivity(c);

    }
 }

 @Override
 public void onResume() {
     super.onResume();

     editText.setText(store);

 }
}

0
投票

活动A。

public class ActivityA extends AppCompatActivity {

private String activityBEditTextContent = null;
private static final int CALL_B = 2;

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

    EditText edA = findViewById(R.id.edit_text_a);
    Button button = findViewById(R.id.button_a);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(ActivityA.this, ActivityB.class);
            intent.putExtra("editTextBContent", activityBEditTextContent);
            startActivityForResult(intent, CALL_B);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALL_B && resultCode == ActivityB.SUCCESS) {
        activityBEditTextContent = data.getStringExtra("editTextBContent");
    }
}
}

活动B

public class ActivityB extends AppCompatActivity {

static final int SUCCESS = 1;
private EditText etB;

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

    etB = findViewById(R.id.edit_text_b);
    Bundle bundle = getIntent().getExtras();
    if(bundle != null) {
        String previousEditTextBValue = bundle.getString("editTextBContent", "");
        etB.setText(previousEditTextBValue);
    }

    Button button = findViewById(R.id.button_b);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ActivityB.this.onBackPressed();
        }
    });

}

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("editTextBContent", etB.getText().toString());
    setResult(SUCCESS, intent);
    super.onBackPressed();
}
}

在活动A中,你应该包括任何需要的代码长期存储的内容,这两个。EditTexts.

© www.soinside.com 2019 - 2024. All rights reserved.