onActivityResult与启动模式的问题
2016-03-03 12:47
579 查看
1.onActivityResult方法的作用:
当我们想要从Activity A启动到Activity B,并且B结束之后(finish),需要再返回给A一定的数据的时候,就会用到这个方法。今天在写项目中正好遇到这样的需求,于是想要利用这个方法做一下。结果在Debug的时候发现出了问题,在调用启动B的代码的时候,onActivityResult方法首先被执行了,而不是先执行B中的代码,经过长时间的检查代码,发现并没有什么问题,很是郁闷,直到最后才想起来,项目开始的时候我修改过B的启动模式为SingleTask,于是赶紧查阅资料,发现问题果然出在这里...
下面是我的代码:
Activity A:
public class MainActivity extends Activity implements OnClickListener{
private ListView mLvContact;
private ImageButton mIBAdd;
private DaoConfig config;
private DbUtils mDbUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initContact();
initView();
}
private void initContact() {
//创建数据库
config=new DaoConfig(this);
config.setDbName("ContactDemo");
config.setDbVersion(1);
if(mDbUtils==null){
mDbUtils=DbUtils.create(this);//db还有其他的一些构造方法,比如含有更新表版本的监听器的
mDbUtils.configAllowTransaction(true);
}
try {
mDbUtils.createTableIfNotExist(UserItem.class);
} catch (Exception e) {
e.printStackTrace();
}
}
private void initView() {
mLvContact=(ListView)findViewById(R.id.lv_contact);
mIBAdd=(ImageButton)findViewById(R.id.ib_add_contact);
mIBAdd.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_add_contact:
//添加联系人
Intent intent=new Intent(this,AddActivity.class);
startActivityForResult(intent, 1001);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1001&&resultCode==RESULT_OK){
//UserItem userItem=(UserItem) data.getSerializableExtra("user");
Toast.makeText(this, "hellow", 1).show();
try {
//保存联系人
// mDbUtils.save(userItem);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Activity B:
public class AddActivity extends Activity implements OnClickListener{
private EditText mEtName;
private ImageButton mBtSave;
private DbUtils mDbUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activty_add);
initViews();
}
private void initViews() {
mEtName=(EditText)findViewById(R.id.et_name);
mBtSave=(ImageButton)findViewById(R.id.ib_add_contact);
mBtSave.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_add_contact:
//保存数据,将数据传回MainActivity
try {
String name=mEtName.getText().toString();
if(TextUtils.isEmpty(name)){
Toast.makeText(this, "姓名不能为空", 1).show();
}
//获得一个UserItem传给MainActivity
/*UserItem userItem=new UserItem();
userItem.setUserName(name);*/
Intent intent=new Intent();
// intent.putExtra("user", userItem);
setResult(RESULT_OK, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
启动模式修改为standard,发现运行正常,bug去除~
当我们想要从Activity A启动到Activity B,并且B结束之后(finish),需要再返回给A一定的数据的时候,就会用到这个方法。今天在写项目中正好遇到这样的需求,于是想要利用这个方法做一下。结果在Debug的时候发现出了问题,在调用启动B的代码的时候,onActivityResult方法首先被执行了,而不是先执行B中的代码,经过长时间的检查代码,发现并没有什么问题,很是郁闷,直到最后才想起来,项目开始的时候我修改过B的启动模式为SingleTask,于是赶紧查阅资料,发现问题果然出在这里...
下面是我的代码:
Activity A:
public class MainActivity extends Activity implements OnClickListener{
private ListView mLvContact;
private ImageButton mIBAdd;
private DaoConfig config;
private DbUtils mDbUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initContact();
initView();
}
private void initContact() {
//创建数据库
config=new DaoConfig(this);
config.setDbName("ContactDemo");
config.setDbVersion(1);
if(mDbUtils==null){
mDbUtils=DbUtils.create(this);//db还有其他的一些构造方法,比如含有更新表版本的监听器的
mDbUtils.configAllowTransaction(true);
}
try {
mDbUtils.createTableIfNotExist(UserItem.class);
} catch (Exception e) {
e.printStackTrace();
}
}
private void initView() {
mLvContact=(ListView)findViewById(R.id.lv_contact);
mIBAdd=(ImageButton)findViewById(R.id.ib_add_contact);
mIBAdd.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_add_contact:
//添加联系人
Intent intent=new Intent(this,AddActivity.class);
startActivityForResult(intent, 1001);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1001&&resultCode==RESULT_OK){
//UserItem userItem=(UserItem) data.getSerializableExtra("user");
Toast.makeText(this, "hellow", 1).show();
try {
//保存联系人
// mDbUtils.save(userItem);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Activity B:
public class AddActivity extends Activity implements OnClickListener{
private EditText mEtName;
private ImageButton mBtSave;
private DbUtils mDbUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activty_add);
initViews();
}
private void initViews() {
mEtName=(EditText)findViewById(R.id.et_name);
mBtSave=(ImageButton)findViewById(R.id.ib_add_contact);
mBtSave.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_add_contact:
//保存数据,将数据传回MainActivity
try {
String name=mEtName.getText().toString();
if(TextUtils.isEmpty(name)){
Toast.makeText(this, "姓名不能为空", 1).show();
}
//获得一个UserItem传给MainActivity
/*UserItem userItem=new UserItem();
userItem.setUserName(name);*/
Intent intent=new Intent();
// intent.putExtra("user", userItem);
setResult(RESULT_OK, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
启动模式修改为standard,发现运行正常,bug去除~
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories