【发布时间】:2015-09-09 18:56:14
【问题描述】:
我有一个由两个活动组成的应用。
主要活动(活动 1)使用某个按钮,使用 startActivityforResult 将您带到活动 2。
Activity 2 是一个文件选择器,通过单击它来选择某个文件。
选择文件后,我希望它以字符串的形式将数据(选择的文件路径)发送回活动 1 并返回活动 1。这样活动 1 将对文件执行某些操作(如活动 1 中所述onActivityResult)。
我正在使用一个简单的onListItemClick 实现(文件选择器使用列表视图来显示我们从中选择文件的列表)。
如果选择确实是一个文件(通过向用户输出“Toast”验证)。
有一个finish() 方法应该发回数据并将您带回活动1。
这是 Activity 2 的 onListItemClick 方法的代码。如果需要更多,请告诉我,我将添加其余活动):
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
String filename = (String) getListAdapter().getItem(position);
if (path.endsWith(File.separator))
{
filename = path + filename;System.out.println("Ends with file separator\n");
}
else
{
filename = path + File.separator + filename;System.out.println("No file separator\n");
}
if (new File(filename).isDirectory())
{
Intent intent = new Intent(this, ListFileActivity.class);
intent.putExtra("path", filename);
startActivity(intent);//re-do this activity, to enter the directory
}
else
{
File F=new File(filename);
Toast.makeText(this, filename + " is not a directory, file chosen!", Toast.LENGTH_LONG).show();
String P=F.getAbsolutePath();
System.out.printf("---------------Absolute directory is %s\n",P);
Intent ResultIntent=new Intent();
ResultIntent.putExtra("Address",filename);
setResult(Activity.RESULT_OK,ResultIntent);
finish();
}
}
感谢大家的热心帮助, 朱利叶斯
【问题讨论】:
-
“但它不这样做”....它做了什么?另外,你是在
startActvitiyForResult()之后在Activity1中调用finish()吗? -
您一遍又一遍地使用
startActivity(intent);来堆叠活动。 -
当您从
Activity2启动Activity2时,添加FLAG_ACTIVITY_SINGLE_TOP并实现onNewIntent。您不想启动多个Activity2s,您必须在这一实例中处理所有目录导航。然后当您调用finish时,它会将结果返回给Activity1。 -
你说得对,尤金!我切换到使用 SingleTop 模式,现在它可以工作了!但是当我第一次调用 Activity2 时(从 Activity1 调用时),我不应该使用 FLAG_SINGLE_TOP 吗? (从活动 1 调用时)。有什么区别?
标签: android onactivityresult activity-finish