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)

私の考えでは、セマフォを取得してからオプションアクティビティを起動し、セマフォを再度取得しようとします。これにより、オプションアクティビティが戻るまでロックされ、で、が呼び出されますrelease。継続する。しかし、うまくいかないようです...2回目の取得で電話を切るだけです。onActivityResultonCreate

フォルダを作成する前にユーザーからオプションを取得して、フォルダの作成にそれらのオプションを使用できるようにするための最良の方法は何ですか?

更新: Optionsアクティビティを呼び出したwhile、小さなセマフォロジック全体を空のループに置き換えて、終了時にOptionsアクティビティによって反転される共有ブール変数を待機するようにしました。ただし、これにより、アプリがオプションアクティビティに到達する前に、アプリが忘却されます。

4

1 に答える 1

0

これを理解した...私がそれを理解すると、かなりばかげているように思えますが、ここにあります...

オプションの選択を別のアクティビティに入れる代わりに、LiveFolder インテントをホームに戻すレイアウトをアクティビティに配置し、そこにオプションを集めます。

オーバーライドする必要があると思っていましsetResult(RESULT_OK, createLiveFolder())onCreateが、ボタンまたはリストのクリックまで遅延できることに気づきませんでした。私がそれを理解したら、すべてがうまくいきました。

于 2011-03-06T07:51:17.807 に答える