从警报对话框收集结果,并在收到结果后继续执行代码

时间:2015-07-02 14:53:39

标签: android dialog alert collect

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

我在main活动中有函数handleIt(),它调用getTagSelectionFromDialogBox()。有公共String selectedTitle和公共整数title_position。

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

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

我需要一些机制来等待警报获取结果和(这是一个字符串),我需要做很多工作,我想在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();
}   

}

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

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

而不是在调用显示对话框的函数后把它放好,你可以将吐司放在另一个函数中,当你单击按钮时调用它:

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