我是怎么变老的activitywindow
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 文本消失了。我需要帮助来保存数据。预先感谢所有回复。
在启动另一个 activity 时不要调用 finish。那么原来的activity会留在activity栈中,编辑文本中的数据仍然会留在activity中。否则,您应该使用 SharedPreferences 来存储您在离开 activity 时需要保留的任何临时数据。然后使用 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);
}
}
Activity答:
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");
}
}
}
Activity乙:
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();
}
}
在 Activity A 中,您应该包括长期存储两个 EditText
的内容所需的任何代码。
如果您只想在 2 个活动之间来回切换,可以执行以下操作:
如果您想从 A
转到 B
,请执行以下操作:
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
中并不是一个好的或稳健的 "persistency" 解决方案,但对于简单的应用程序来说,它当然可以用于此。
我会在基本情况下解释我的问题。假设我有 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 文本消失了。我需要帮助来保存数据。预先感谢所有回复。
在启动另一个 activity 时不要调用 finish。那么原来的activity会留在activity栈中,编辑文本中的数据仍然会留在activity中。否则,您应该使用 SharedPreferences 来存储您在离开 activity 时需要保留的任何临时数据。然后使用 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);
}
}
Activity答:
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");
}
}
}
Activity乙:
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();
}
}
在 Activity A 中,您应该包括长期存储两个 EditText
的内容所需的任何代码。
如果您只想在 2 个活动之间来回切换,可以执行以下操作:
如果您想从 A
转到 B
,请执行以下操作:
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
中并不是一个好的或稳健的 "persistency" 解决方案,但对于简单的应用程序来说,它当然可以用于此。