我可以在 finish() 上传递额外的 Intent 吗?

2024-01-07

我想知道,是否可以将信息发送到调用 finish() 后返回的活动?

例如,我有一个活动SendMessageActivity.class它允许用户向他们的提要发布消息。将消息保存到服务器后,我调用finish()。我应该开始我的MainActivity.class有新的意图吗?还是生命周期开发直接结束更好SendMessageActivity.class?

我不认为开始一项新活动有什么意义,因为关闭当前活动总会让您回到原来的状态MainActivity.class。完成当前活动后如何发送额外的字符串?


Use 活动结果.

这可能会帮助你理解活动结果.

通过使用startActivityForResult(Intent intent, int requestCode)你可以start另一个活动,然后收到结果从该活动中onActivityResult()方法.SoonActivityResult()是从您开始另一个活动的地方。

onActivityResult(int requestCode, int resultCode, Intent data)检查这里的参数。请求代码用于从您获得结果的位置进行过滤。这样您就可以使用它们的请求代码来识别不同的数据!

Example

 public class MainActivity extends Activity {

        // Use a unique request code for each use case 
        private static final int REQUEST_CODE_EXAMPLE = 0x9988; 

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

            // Create an Intent to start AnotherActivity
            final Intent intent = new Intent(this, AnotherActivity.class);

            // Start AnotherActivity with the request code
            startActivityForResult(intent, REQUEST_CODE_EXAMPLE);
        }

        //-------- When a result is returned from another Activity onActivityResult is called.--------- //
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            // First we need to check if the requestCode matches the one we used.
            if(requestCode == REQUEST_CODE_EXAMPLE) {

                // The resultCode is set by the AnotherActivity
                // By convention RESULT_OK means that what ever
                // AnotherActivity did was successful
                if(resultCode == Activity.RESULT_OK) {
                    // Get the result from the returned Intent
                    final String result = data.getStringExtra(AnotherActivity.EXTRA_DATA);

                    // Use the data - in this case, display it in a Toast.
                    Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show();
                } else {
                    // AnotherActivity was not successful. No data to retrieve.
                }
            }
        }
    }

AnotherActivityMainActivity

public class AnotherActivity extends Activity {

        // Constant used to identify data sent between Activities.
        public static final String EXTRA_DATA = "EXTRA_DATA";

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

            final View button = findViewById(R.id.button);
            // When this button is clicked we want to return a result
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // Create a new Intent as container for the result
                    final Intent data = new Intent();

                    // Add the required data to be returned to the MainActivity
                    data.putExtra(EXTRA_DATA, "Some interesting data!");

                    // Set the resultCode to Activity.RESULT_OK to 
                    // indicate a success and attach the Intent
                    // which contains our result data
                    setResult(Activity.RESULT_OK, data); 

                    // With finish() we close the AnotherActivity to 
                    // return to MainActivity
                    finish();
                }
            });
        }

        @Override
        public void onBackPressed() {
            // When the user hits the back button set the resultCode 
            // to Activity.RESULT_CANCELED to indicate a failure
            setResult(Activity.RESULT_CANCELED);
            super.onBackPressed();
        }
    }

Note: 现在签到MainActivity you startActivityForResult在那里你指定一个REQUEST_CODE。假设您想调用三个不同的活动来获取结果..所以有三个startActivityForResult调用三个不同的请求代码的。 REQUEST_CODE 只是您在活动中指定的唯一键,用于唯一标识您的startActivityForResult calls.

一旦您从这些活动收到数据,您就可以检查 REQUEST_CODE 是什么,然后您就知道啊哈这个结果来自该活动。

这就像你给你的爱人发了一封带有彩色封面的邮件,并要求他们用同样的封面回复。然后,如果您收到他们的回信,您就知道是谁给您寄来的。哇哦;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 finish() 上传递额外的 Intent 吗? 的相关文章

随机推荐