Android 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

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/81749500