繁体   English   中英

我如何获得旧活动 window

[英]How do I get old activity window

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

对于 A 中的按钮:

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

对于 B 中的按钮:

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

但是当我单击按钮时,EditTexts 文本正在消失。 我需要帮助来保存数据。 提前感谢所有回复。

如果您只想在 2 个活动之间来回切换,可以执行以下操作:

当您想从AB的 go 时,请执行以下操作:

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

这将采用现有的B实例并重新排列它,使其现在位于任务堆栈的顶部(即:向用户显示)。 A的现有实例现在位于其下方。

B中,将 go 到A中,使用相同的附加行修改代码以添加REORDER_TO_FRONT标志。

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

开始其他活动时不要调用完成 那么原来的activity会留在activity栈中,而edit text中的数据依然会留在activity中。 否则,您应该使用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);

 }
}

活动一:

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 中,您应该包含长期存储两个EditText内容所需的任何代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM