2010-12-06 25 views
3

私は本当に欲しくないときにコードを実行し続けるAndroidの状況をどのように処理するかを考え出すのに苦労しています。あるアクティビティのonCreate()には、私が順番に行う必要があるものがあり、特定のことが最初に起こるまで、コードを実行し続けることはできません。私はこれがAndroidとJavaがどのように振る舞うかを理解しており、私が必要とするものを達成する別の方法を見つけ出すのに苦労しています。私はAndroidとJavaで助けが必要です

ShowEulaは、私のEULAで簡単なダイアログを表示するために作成したクラスです。 DBGetOnlineVersionNumber()を呼び出す前に、ユーザーがEULAに同意するか不同意になるまで待つ必要があります。たぶん、私はこれを正しい方法で行かないだろう。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.main); 
    String version; 
    ShowEula();  
    version = DBGetOnlineVersionNumber(); 
    .... 

答えて

4

あなたはアンドロイドで使用されるイベント駆動型モデルの観点で物事を再考する必要があります。とにかく、ここに私のコードの抜粋です。

onCreateが戻った後までUIイベントを配信できないため、onCreateでUIイベントを待つことはできません。

おそらく、ソフトウェア状態マシンとして構成することができます。

のonCreateは、EULAを表示してEULA_SHOWING

EULA_ACCEPTEDに状態を進めると、あなたはおそらく、すべての起動時にEULAを表示したくないもちろん

次のものを表示していまし受け入れる

に状態を設定しますインストール後にのみ有効ですが、設定に保存されているものでこれを処理できます。

+0

私はEULAを処理するためにsharedpreferencesを使用しています。私はあなたが示唆していることを考えていたが、それをすべて整理することに問題がある。あなたはハンドラのようなものを提案していますか?私はEULA_SHOWINGの状態を設定できますか?私はそれをどうお勧めしますか? –

+0

いいえ、イベント駆動型のユーザーインターフェイスプログラミングという概念全体を再考する必要があることをお勧めします。システムとユーザーの両方が、作成やタッチのようなイベントを、あなたが何か非常に素早くやり遂げるイベントを得るたびに、あなたが次に/何をすべきかを知るように状態変数を設定しますあなたがそれを得た後。 –

+0

入手しました。非常に有用で有用な情報。 Chrisに感謝します。 –

3

はい、これは非同期的に動作するすべてのGUIの一般的な問題です。私はあなただけ2つのxmlレイアウトを作成することができると思う私は、通常、共有優先してブール値を入れた後、起動に2つのブランチを作成されません...

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.main); 
    String version; 

    if (Settings.isEulaBeenShown() == false) { 
     /* showEula would call stuffToDoIfUserAgreesToEULA on a positive response was given */ 
     ShowEula(); 
    } 
    else if (Settings.isEULAAgreed() == true) { 
     stuffToDoIfUserAgreesToEULA() 
    } 
    .... 
} 

private void stuffToDoIfUserAgreesToEULA() { 
    String version = DBGetOnlineVersionNumber(); 
} 
+0

さて、ちょっと試してみて、それがどうなるか見てみましょう。これは理にかなっています。私はフラグに対処するために共有されたprefsを使う考えが好きです。 –

+0

アンドリュークイック質問。免責事項:私はAndroidの初心者です...どのようにShowEulaは私が作成したEulaクラスからstuffToDoIfUserAgreesToEULAを呼び出しますか? –

+0

アンドリュー、助けを借りてくれてありがとう。私はそれが今考え出されていると思う。 –

0

あなたのEULAと承認/拒否ボタン用に1つ、メインアプリ用にもう1つ。

アプリが読み込まれると、初めてEULAレイアウトが表示され、共有設定では追跡されない場合のみ表示されます。

ユーザーが受け入れると、アプリケーションコンテンツビューでコンテンツビューが設定されます。

onCreate()のほとんどのものを抽象化して、コンポーネントを再利用できるようにします。

private static boolean EulaRequired = true; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    EulaRequired = sharedprefs.getBoolean("firsttime", true); 
    inflateLayout();  
} 

private void inflateLayout() { 
    if (EulaRequired) { 
    this.setContentView(R.layout.eula); 
    } else { 
    this.setContentView(R.layout.application); 
    DBGetOnlineVersionNumber(); 
    } 
} 
private void stuffToDoIfUserAgreesToEULA() { 
    String version = DBGetOnlineVersionNumber(); 
} 
void AcceptClicked(Event e) { 
    EulaRequired = false; 
    inflateLayout(); 
} 

何かこれはうまくいくはずですが、私はそれを試みたことはありません。

関連する問題