0

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

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

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

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

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

下面是代码片段公共类 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() 中执行的数据库操作

我怎样才能做到这一点?

4

1 回答 1

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();
}
于 2015-07-02T15:06:16.090 回答