0

私は、Android がパフォーマンスの向上、メモリの改善などのためにダイアログを非同期的に管理していることをよく知っています。しかし、問題は、アプリの実行を追跡するためにユーザーからの入力を取得する必要があるという単純な状況に遭遇したことです。ユーザーが私のプロンプトダイアログに何かを書いたかどうか。これを解決する方法はありますか????

コードは次のとおりです。

@Override 
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case 1:
        startActivity(new Intent("HOMESCREEN"));
        break;
    case 2:
        String searched = prompt("Search", HomeScreen.this);
        Intent data = new Intent("RESULTSSCREEN");
        data.putExtra("SearchCriteria", "");
        startActivity(data);
        break;
    case 3:
        //....
        break;
    }

    return true;
}

プロンプトのコードは次のとおりです。

public String prompt(String message, Context ctx)
    {
        //load some kind of a view
        LayoutInflater li = LayoutInflater.from(ctx);
        View view = li.inflate(R.layout.prompt_layout, null);
        //get a builder and set the view
        AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
        builder.setTitle("Search");
        builder.setView(view);
        //add buttons and listener
        PromptListener pl = new PromptListener(view);
        builder.setPositiveButton("OK", pl);
        builder.setNegativeButton("Cancel", pl);
        //get the dialog
        AlertDialog ad = builder.create();
        //show
        ad.show();

        return pl.getPromptReply();
    }

問題は、ユーザーが検索基準を書き終える前に意図データが実行されていることです。よろしく

4

3 に答える 3

1

Android ダイアログを使用しないでください。代わりに、マニフェストでこれを使用してダイアログのように機能する新しいアクティビティを作成します

android:name="com.namespace.DialogActivity"
android:theme="@android:style/Theme.Dialog"

次に、メイン アクティビティから startActivityForResult(intent) を使用します。onActivityResultで結果をキャプチャできます

私はこれをしようとして同じ問題を抱えていました。これがあなたが探しているものだと信じてください。ダイアログをカスタマイズする柔軟性が大幅に向上し、結果を取得できます。

于 2012-11-20T21:04:56.557 に答える
0

AlertDialogに固執することはできますが、ポジティブボタンとネガティブボタンを別の方法で設定する必要があります(たとえば、これを確認してください)。

final EditText input = new EditText(this);
alert.setView(input);

alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      String value = input.getText();
      // Do something with value!
    }
});
于 2012-11-20T21:47:14.123 に答える
0

Prompt 内で PromptListener のインスタンスを作成して文字列を返す代わりに、PromptListener のインスタンスを Prompt に渡し、PromptListener 内で新しいテキスト値を渡すことができるメソッドを定義する必要があります。このようなもの:

@Override 
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case 1:
        startActivity(new Intent("HOMESCREEN"));
        break;
    case 2:
        prompt("Search", HomeScreen.this, new PromptListener(){
            @Override
            public void TheTextIsReady(String text){
                Intent data = new Intent("RESULTSSCREEN");
                data.putExtra("SearchCriteria", text);
                startActivity(data);
            }
        });
        break;
    case 3:
        //....
        break;
    }

    return true;
}

*注、PromptListener のコードを投稿していないので、この場合、'TheTextIsReady(...)' は私が作ったものです。

于 2012-11-20T21:12:28.930 に答える