1

好的,我正在尝试编写一个 Live Folder 提供程序,它在被调用和创建文件夹之间,首先询问用户一些选项。它一直有效,直到我尝试在创建文件夹之前等待选项。我很确定这是因为我试图等待选项活动。

我正在尝试通过 1 槽信号量等待选项。这是我的基本半伪代码:

package mypackage

import <all-my-imports>

public class Folder extends Activity {
    Intent getOptions = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final Intent intent = getIntent();
        final String action = intent.getAction();

        if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {           
            try {
                CoreLib.Blocker().acquire();                
                getOptions = new Intent(this, Options.class);
                startActivityForResult(getOptions, 0);              
                CoreLib.Blocker().acquire();

                if(getOptions == null) { 
                    throw new Exception("Live folder canceled."); 
                }

                <create-live-folder-from-options>

                setResult(RESULT_CANCELED);
                finish();
            } catch (Exception e) {
                CoreLib.showToast(e.getMessage(), Toast.LENGTH_LONG);

                setResult(RESULT_CANCELED);
                finish();
            }
        } else {
            setResult(RESULT_CANCELED);
            finish();
        }
    }

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        getOptions = intent;
        CoreLib.Blocker().release();
    }   
}

CoreLib.Blocker()是一个信号量,它被初始化为:new Semaphore(1, true).

我的想法是它会获取信号量,然后启动 Options 活动,然后它会尝试再次获取信号量,这会将其锁定,直到 Options 活动返回,release然后onActivityResult它将onCreate调用继续。虽然它似乎不起作用......只是挂断了第二次收购,就是这样。

在创建文件夹之前从用户那里获取选项的最佳方法是什么,以便我可以在创建文件夹时使用这些选项?

更新:我现在还尝试在调用 Options 活动while用一个空循环替换我的整个小信号量逻辑,等待一个共享的布尔变量,该变量将在 Options 活动完成时翻转。但这也会让应用程序在进入 Options 活动之前被遗忘。

4

1 回答 1

0

想通了...一旦我想通了,这似乎很愚蠢,很明显,但是就在这里...

与其将我的选项选项放入单独的活动中,不如在活动上放置一个布局,将 LiveFolder 意图返回到主页,并在那里收集我的选项。

我以为您必须进行setResult(RESULT_OK, createLiveFolder())覆盖onCreate,但没有意识到您可以将其延迟到单击按钮或列表单击。一旦我想通了,一切就都到位了。

于 2011-03-06T07:51:17.807 回答