您的位置:首页 > 移动开发 > Android开发

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去除~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息