我的代码应该显示一个包含字符串列表的警告对话框。一旦用户选择了一个,我需要使用该字符串。
我在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()中执行的数据库操作
我怎样才能实现这个目标?
答案 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();
}