我非常清楚Android会以异步方式管理其Dialog,以提高性能,改善内存等。但问题是我遇到了一个简单的情况,我需要获取用户给出的输入以便跟随app的执行。因为我使用Dialog这一切都搞砸了导致应用程序的流程继续用户是否在我的提示对话框中写了一些内容。有没有办法解决这个????
以下是代码:
@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();
}
问题是意图数据在用户完成编写搜索条件之前正在执行。 此致
答案 0 :(得分:1)
请勿使用Android对话框。而是在清单
中创建一个与此对话的新活动android:name="com.namespace.DialogActivity"
android:theme="@android:style/Theme.Dialog"
然后,您将使用主活动中的startActivityForResult(intent)。您可以使用onActivityResult
捕获结果我在尝试这样做时遇到了同样的问题,请相信我这就是你要找的东西。它为您提供了更多的自定义对话框的灵活性,并允许捕获结果
答案 1 :(得分: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(...)'就是我编写的东西。
答案 2 :(得分:0)
您可以坚持使用AlertDialog,但是您需要以不同的方式设置正面和负面按钮(例如,选中this):
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!
}
});