博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android编程权威指南学习:Activity之间传递参数
阅读量:7210 次
发布时间:2019-06-29

本文共 3084 字,大约阅读时间需要 10 分钟。

hot3.png

在Android编程中,经常会有多个Activity之间、同Activity的旋转都要进行调用,数据传递的现象。如何理解Activity,确保正确的调用是每个Androider必须掌握的知识。

1:Activity旋转过程中通过Bundle实例进行数据读写,在onCreate(Bundle)读取、onSaveInstanceState(Bundle)写入。

例子:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_quiz);        //读取数据,并保存到类变量中        if (null != savedInstanceState) {            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX);            mCheatersArray = savedInstanceState.getBooleanArray(USER_CHEAT_RECORD);        }        ***}protected void onSaveInstanceState(Bundle savedInstanceState) {        super.onSaveInstanceState(savedInstanceState);        //保存当前题目编号        savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);        //保存用户作弊记录        savedInstanceState.putBooleanArray(USER_CHEAT_RECORD, mCheatersArray);            //保存两项数据,在onCreate方法中调用传递数据    }}

2:Activity之间的调用通过startActivity(Intent)只向子Activity传递数据,不会接收子Activity传回的数据;startActivityForResult(***)向子Activity传递数据,并通过onActivityResult(***)方法读取子Activity传回的数据。子Activity通过setResult(***)向父Activity传递数据。

//父Activity方法    //通过mCheatButton事件,创建子Activity实例,并传递数据    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        printLogInConsole(TAG, ONCREATE);        setContentView(R.layout.activity_quiz);        ***        mCheatButton = (Button) findViewById(R.id.cheat_button);        ***        mCheatButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent i = new Intent(QuizActivity.this, CheatActivity.class);                boolean answerIsTrue = mQuestionBank[mCurrentIndex].isTrueQuestion();                //传入所选问题索引、标准答案                i.putExtra(CheatActivity.EXTRA_ANSWER_IS_TRUE, answerIsTrue);                i.putExtra(CheatActivity.EXTRA_ANSWER_INDEX, mCurrentIndex);                //仅向子Activity传递数据                //startActivity(i);                //向子Activity传递数据并获取返回数据                startActivityForResult(i, CheatActivity.CHEAT_REQUEST_CODE);            }        });        ***    }    //获取子Activity返回的数据    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        //是否对应的Activity返回        if (CheatActivity.CHEAT_REQUEST_CODE != requestCode) {            return;        }        if (RESULT_OK != resultCode) {            return;        }        if (null == data) {            return;        }        mIsCheater = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOWN, false);        mCurrentIndex = data.getIntExtra(CheatActivity.EXTRA_ANSWER_INDEX, 0);        //更新用户作弊信息        mCheatersArray[mCurrentIndex] = mIsCheater;    }    //子Activity    //子Activity通过setResutl向父Activity传递数据    private void setAnswerShownResult(boolean isAnswerShown) {        Intent data = new Intent();        data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);        data.putExtra(EXTRA_ANSWER_INDEX, mCurrentIndex);        setResult(RESULT_OK, data);    }

 

转载于:https://my.oschina.net/weiweiqiao/blog/872503

你可能感兴趣的文章
重庆新闻联播 报道 thingJS 项目 反恐3D可视化预案 多警种3D可视化预案系统 ...
查看>>
设计模式之工厂模式
查看>>
为啥说5G是“全村人的希望” 2018年5G产业大盘点 ...
查看>>
阿里云备案服务号申请方法及申请条件
查看>>
鲜为人知的混沌工程,到底哪里好?
查看>>
AI技术普及,直播平台源码开发市场发展可期
查看>>
【MaxCompute季报】MaxCompute新功能发布 2018Q4
查看>>
虚拟化架构种类、特点及优势
查看>>
可爱的python 大合集
查看>>
java学习计划
查看>>
java反射机制
查看>>
井盖智能化升级最佳实践
查看>>
阿里云服务器部署Java Web项目全过程
查看>>
一个限制进程 CPU 使用率的解决方案
查看>>
HBase-拆分合并和调优参考
查看>>
SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset
查看>>
redis rdb持久化
查看>>
拾叶集 - 江湖一剑客
查看>>
WPF DataTomplate中Command无效
查看>>
【对讲机的那点事】带你玩转手机对讲(下)
查看>>