【问题标题】:collect result from alert dialog and continue execution of code once result received从警报对话框收集结果并在收到结果后继续执行代码
【发布时间】:2015-07-02 14:53:38
【问题描述】:

我的代码应该显示一个带有字符串列表的警报对话框。一旦用户选择了一个,我需要使用该字符串。

我在调用getTagSelectionFromDialogBox() 的主要活动中有函数handleIt()。有 public String selectedTitle 和 public integer title_position。

我看到一个问题,从 handleIt() 调用 getTagSelectionFromDialogBox() 之后,我调用 Toast 来打印 selectedTitle。

我在这里看到的问题是警报对话框和 Toast 都在执行,并且 Toast 显示 null(因为它被初始化为 null)而不是 Toast 等待 getTagSelectionFromDialogBox() 完成。这是我的代码

我需要一些机制来等到 alert 得到结果和(这里是一个字符串),我需要对那个字符串做很多工作,我想在 getTagSelectionFromDialogBox() 之后做,我不想做它在 DialogInterface.OnClickListener() 的 onClick() 中。

以下是代码片段 公共类 MainActivity 扩展 ActionBarActivity NavigationDrawerFragment.FragmentDrawerListener{

public String selectedTitle = null;
public int title_position;
public  String[] navTitles = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // do some work 
    navTitiles = getnavTitles() // fills lsit
    handlit();
    }

void handleRest(Intent intent) {
        getTagSelectionFromDialogBox();
        Toast.makeText(getApplicationContext(),"category selected: "+ selectedTitle, Toast.LENGTH_LONG).show();
    }

public void getTagSelectionFromDialogBox() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
        alertDialog.setTitle("Select tag");
        alertDialog.setSingleChoiceItems(navTitles, -1, new             DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                    title_position = which;
                selectedTitle = navTitles[which];
                dialog.cancel();
                    }
        });

    AlertDialog ad = alertDialog.create();
    ad.show();
}   

}

toast 之后,我必须使用 selectedTitile 并执行一些我不想在 onClick() 中执行的数据库操作

我怎样才能做到这一点??

【问题讨论】:

    标签: android dialog alert collect


    【解决方案1】:

    您可以将 toast 放在另一个函数中,当您单击这样的按钮时调用该函数:

    public String selectedTitle = null;
    public int title_position;
    public  String[] navTitles = null;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // do some work 
        navTitiles = getnavTitles() // fills lsit
        handlit();
    }
    
    void handleRest(Intent intent) {
        getTagSelectionFromDialogBox();
    }
    
    private void showToast() {
    
        Toast.makeText(getApplicationContext(),"category selected: "+ selectedTitle, Toast.LENGTH_LONG).show();
    }
    
    public void getTagSelectionFromDialogBox() {
        AlertDialog.Builder alertDialog = new     AlertDialog.Builder(MainActivity.this);
        alertDialog.setTitle("Select tag");
        alertDialog.setSingleChoiceItems(navTitles, -1, new             DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                    title_position = which;
                selectedTitle = navTitles[which];
                showToast();
                dialog.cancel();
                    }
        });
    
        AlertDialog ad = alertDialog.create();
        ad.show();
    }
    

    希望对你有帮助

    编辑:根据您的评论:替换以下行

    showToast();
    

    通过

    showToast(selectedTitle);
    

    然后你只需要像这样在其他函数中获取输入:

    private void showToast(String selectedTitle) {
    
        Toast.makeText(getApplicationContext(),"category selected: "+ selectedTitle, Toast.LENGTH_LONG).show();
    }
    

    【讨论】:

    • 到目前为止,我只是在 Toast 中使用 selectedTitle 来打印输入。但是我需要的是,一旦我从警报框中得到它,就需要使用该字符串。使用上面的代码 Toast aftergetTagSelectionFromDialogBox() 在警报对话框之前或一起执行。我想要的是 getTagSelectionFromDialogBox() 旁边的代码应该执行 getTagSelectionFromDialogBox() 调用后收到的结果。
    • 响应已编辑,您只需将标题作为参数传递
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多