【问题标题】:How do I get old activity window如何获取旧的活动窗口
【发布时间】:2020-09-11 10:27:23
【问题描述】:

我将在基本情况下解释我的问题。假设我有 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 文本正在消失。我需要帮助来保存数据。提前感谢所有回复。

【问题讨论】:

  • 按下按钮时,您的代码不会将您带到活动 A 和 B 之间。它会在每次按下按钮时创建一个新的 Activity,并将它们添加到不断增长的堆栈中。
  • 如何在它们之间导航?
  • 查看我在下面发布的答案。

标签: android android-intent android-activity android-edittext android-button


【解决方案1】:

如果你只是想在 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 中并不是一个好的或稳健的“持久性”解决方案,但对于简单的应用程序,它当然可以用于此目的。

【讨论】:

    【解决方案2】:

    开始其他活动时不要调用完成。那么原来的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);
    
     }
    }
    

    【讨论】:

    • 那么,我是否必须将所有变量保存在手动编写代码的活动窗口中?没有其他方法或库可以保存所有这些吗?
    【解决方案3】:

    活动 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 的内容所需的任何代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2013-02-06
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多