【发布时间】:2014-08-07 16:33:34
【问题描述】:
我有一个应用程序在初始启动时会打开一个配置活动,并且该配置活动会打开一个列表活动(onCreate 中的 startActivityForResult)。在列表活动中,用户可以选择一个值,该值会关闭列表并将该值发送到配置活动(setResult、finish、onActivityResult)。
当我在模拟器中尝试时效果很好,几乎所有尝试过的人都可以使用。
但是,现在有人发送了一封无法在他的设备(Galaxy)上运行的邮件:他可以选择列表中的某些内容并将其关闭,但配置活动再次将其打开(好像它没有收到选定的结果)。会发生什么?我需要让用户弄清楚什么?
public class AccountInfo extends VideLibriBaseActivity /* extends SherlockActivity */ {
void openList(){ //called in onCreate and on cancel
findViewById(R.id.libraryTextView).postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(AccountInfo.this, LibraryList.class);
//...
startActivityForResult(intent, REQUEST_LIBRARY_FOR_ACCOUNT_CREATION);
}
}, 200); //did not work without delay on some devices
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_LIBRARY_FOR_ACCOUNT_CREATION) {
if (resultCode == LibraryList.RESULT_OK) {
libId = data.getStringExtra("libId");
libName = data.getStringExtra("libName");
lib.setText(libName);
//...
} else if (libId.equals(""))
if (mode == MODE_ACCOUNT_CREATION_INITIAL && (VideLibriApp.accounts.length == 0))
openList();
else
finish();
}
}
}
public class LibraryList extends VideLibriBaseActivity /* extends SherlockActivity */ {
//...
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int i, int i2, long l) {
Intent result = new Intent();
result.putExtra("libName", localLibs.get(i).get(i2).get("NAME"));
result.putExtra("libId", localLibs.get(i).get(i2).get("ID"));
//...
setResult(RESULT_OK, result);
LibraryList.this.finish();
return true;
}
});
//...
}
launchMode 是两个活动的 singleTop
【问题讨论】:
-
您正在接收 libName,但如果不是这种情况,则与 libId 核对,您能否显示有关如何调用 openList() 以及 UpdateLibrary() 是什么的代码
-
@RajnishMishra:似乎我简化了太多。 updateLibrary 是 openList,它接收 libId 和 libName。
-
你能确保 localLibs.get(i).get(i2) 永远不会给出空字符串
-
@RajnishMishra:它不应该为空(它是加载其他值的文件的名称)。但即使它是空的,也没有关系,因为它只测试 else 分支中的空,它不应该采用