相关疑难解决方法(0)

startActivityForResult与launchMode singleInstance无法正常工作

我希望我的应用程序的Activity堆栈上的活动只有一个实例.我有几个是ListActivities的屏幕,当我更改ListActivity的另一个实例(添加,编辑,删除等)时,我不想经历更新ListActivity的前一个实例中的列表的痛苦和痛苦. (或者有一种简单的方法可以做到这一点吗?).

注意:我已经读过singleTop会完成这个(虽然如果你点击后退按钮会破坏Activity),但它不起作用.我有一个菜单,如果我进入我的收件箱屏幕,然后我转到我的快捷列表屏幕,然后我再次进入我的收件箱屏幕,它会创建一个新的收件箱活动.

现在,在我的ListActivities上,我将launchMode设置为singleInstance.问题是:如果我使用startActivityForResult启动另一个Activity,onActivityResult处理程序会立即触发(在创建新Activity之前).当我在下一个屏幕上执行必要的操作以返回结果时,onActivityResult处理程序不会触发.

到底是怎么回事?

以下是我如何解雇新活动:

Intent intentLaunchQuickList = new Intent(ActivityMyList.this, ActivityQuickList.class);
startActivityForResult(intentLaunchQuickList, REQUEST_QUICKLIST);
Run Code Online (Sandbox Code Playgroud)

以下是我返回结果的方法:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    QuickListItem qlItem = m_Adapter.getItem(position);
    if (qlItem != null && qlItem.getQLId() != -1) {
        Intent data = new Intent();
        data.putExtra("ql_id", qlItem.getQLId());
        if (getParent() == null) {
            setResult(Activity.RESULT_OK, data);
        }
        else {
            getParent().setResult(Activity.RESULT_OK, data);
        }
    }
    finish();
}
Run Code Online (Sandbox Code Playgroud)

这是我的onActivityResult处理程序:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode …
Run Code Online (Sandbox Code Playgroud)

android single-instance android-activity

18
推荐指数
1
解决办法
1万
查看次数

检查用户对Intent.ACTION_VIEW的操作

我有一个listview填充了一些文件,可以有各种类型,如pdf或文档.当用户点击一个我得到文件mime类型并启动一个意图,让用户选择用于打开该文件的应用程序.我想要知道的是用户选择了什么东西,或者只是简单地按回去并没有选择任何东西.我现在直到尝试的是做一个startActivityForResult并检查是否成功,但它总是返回RESULT_CANCELED

    static final int SELECTED_VIEWER = 1;

    Intent intent = new Intent(Intent.ACTION_VIEW);     
    intent.setDataAndType(Uri.parse(filePath), mimetype);
    try {
        startActivityForResult(intent, SELECTED_VIEWER);
    }catch (ActivityNotFoundException e) {
        Toast.makeText(getActivity(), 
           Strings.ERROR_NO_VIEWER, 
            Toast.LENGTH_SHORT).show();
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == SELECTED_VIEWER) {
         if (resultCode == Activity.RESULT_CANCELED ) {
             //do something
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

我甚至尝试使用startActivityForResult(Intent.createChooser但仍然无济于事.我怎么知道用户是否选择了该列表中的内容,或者他是否取消了打开?

android android-intent

8
推荐指数
1
解决办法
5563
查看次数