2012-11-20 70 views
0

我很清楚,Android以异步方式管理其对话框,以改善性能,改善内存等。但问题是,我遇到了一个简单的情况,我需要获取用户给出的输入,以跟随应用程序的执行。由于我使用的是对话框,所有这些都会导致应用程序继续流动无论用户在我的提示对话框中写了些什么。有没有解决这个问题的方法?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(); 
    } 

的问题是,在用户完成了写入的搜索条件之前的意图数据正在执行。 Regards

+0

粘贴代码会更有益 – waqaslam

回答

1

请勿使用Android对话框。相反,创建在清单

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

就像这个对话框然后一个新的活动,您将使用startActivityForResult(意向)从您的主要活动。您可以使用onActivityResult

捕获结果我也遇到了同样的问题,试图做到这一点,相信我这就是您要找的。它为您提供了更多的自定义对话框的灵活性,并允许捕获结果

+0

我认为是一个好主意:) – Daniel

0

您不应在Prompt中创建PromptListener实例并让它返回一个字符串,而应该将PromptListener的实例传递给提示并定义一个方法在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(...)”只是我做了。

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! 
    } 
});