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

与其在 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 回答
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 回答