必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android startActivityForResult基本用法

时间:2019-08-21 02:43:17来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

startactivityforresult

从A页面使用startActivityForResult()跳转到B页面,B页面点击返回时将新写入的值传回到A页面。

MainActivity:

public class MainActivity extends APPCompatActivity {

    private TextView textView;

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

        findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1);
            }
        });

        textView = (TextView) findViewById(R.id.textview);
    }

    @Override
    protected void onActivityResult(int requestcode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //此处可以根据两个Code进行判断,本页面和结果页面跳过来的值
        if (requestCode == 1 && resultCode == 3) {
            String result = data.getStringExtra("result");
            textView.setText(result);
        }
    }
}
SecondActivity:
public class SecondActivity extends Activity {

    EditText text1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        text1 = (EditText) findViewById(R.id.text1);
        Button finish = (Button) findViewById(R.id.finish);
        finish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent();
                i.putExtra("result", text1.getText().toString());
                setResult(3, i);
                finish();
            }
        });
    }

    /**
     * 不起作用
     */
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent i = new Intent();
        i.putExtra("result", text1.getText().toString());
        setResult(3, i);
        finish();
    }

    /**
     *   需要拦截press的事件
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent i = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("result", text1.getText().toString());
            setResult(3, i.putExtras(bundle));

//            Intent i = new Intent();
//            i.putExtra("result", text1.getText().toString());
//            setResult(3, i);
            finish();
            return true;
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }
}

    注意:

 1. 在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

2.另外在运行过程中,发现按Back键后,是直接返回RESULT_CANCELED的,而且不带有数据的。如果你设想在按返回键时返回数据,那么需要截获Back键的事件处理。

项目完整地址在这里:

https://github.com/buder-cp/base_component_learn

相关阅读

innerHTML的基本用法

定义:innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。 /*这串代码的var a的变量是我瞎写的。我忘记js咋样定义变量

Android 请求数据时,报错 "HttpException:HTTP 503 S

(1)场景http请求数据时,报以下异常  :同时,后台也检测不到接口请求的痕迹,但是有时再试一下又行了。(2)解决思路①后台连接数量可能限制,

unix_timestamp 时间戳函数用法(hive)

一、unix_timestamp函数用法 1、unix_timestamp() 得到当前时间戳 2、如果参数date满足yyyy-MM-dd HH:mm:ss形式,则可以直接unix

一个强悍而优美的Android视频播放器

最近项目中有需要用在线视频播放。之前有关于视频播放介绍了一些工具使用。如ijkplayer ,ExoP

stringstream 用法

在使用C++编程的时候,有时会输入一段英文句子,如果使用Python原因的话,那么直接使用 split() 函数就好了。那么使用C++有没有方便的

分享到:

栏目导航

推荐阅读

热门阅读