java - 从 Android 应用程序对象显示对话框(或需要可用于多个 Activity 的例程)

标签 java android android-activity

fragment 对我的问题来说不是必需的(所以不要离开哈哈),但我提到它是为了解释我为什么要这样做。

我正在使用 fragment ,因此根据布局不同的 Activity 将成为容器。因此,我需要此例程可用于多项 Activity 。我有一个通用例程,无论使用哪个 Activity 都需要运行,因此为了不重复代码,我将例程设置为从应用程序对象运行。

如果此代码包含在 Activity 中,则它可以工作,但是当放入应用程序对象(并根据需要进行修改)时,它会失败。当我尝试 .show() 对话框时,出现错误“无法添加窗口—— token null 不适用于应用程序”。

这是来自需要调用失败例程的 Activity 之一的调用例程:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpTo(this, new Intent(this, ChecklistListActivity.class));
            return true;
        case R.id.mnuDelete:
            ((KnowUrStuffApp)getApplication()).deleteChecklist(this);//<--This is the call!!!
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}

这是我的应用程序子类中包含的例程:

public void deleteChecklist(final FragmentActivity sender){
    Checklist cl = getDbHelper().getCurrentChecklist();
    if (cl == null)
        Toast.makeText(this, getString(R.string.strSelectAChecklistToDelete), Toast.LENGTH_SHORT).show();
    else {
        try {
            new AlertDialog.Builder(this)
               .setMessage(cl.getChecklistTitle() + " " + getString(R.string.strConfirmDelete))
               .setCancelable(true)
               .setPositiveButton(android.R.string.ok,
                  new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int whichButton){
                          performDeleteChecklist();
                          if (sender instanceof ChecklistDetailActivity)
                              NavUtils.navigateUpTo(sender, new Intent(sender, ChecklistListActivity.class));
                      }
                  })
               .setNegativeButton(android.R.string.cancel, null)
               .show();//<--This causes exception!

        } catch (Exception e) {
            Log.e(TAG,e.getLocalizedMessage());
            Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG * 4).show();
        }
    }
}

我怎样才能让它工作,或者如果让这个例程可用于多个 Activity 是完全错误的方法,我怎样才能让它可用?

我可以在每个 Activity 中复制代码以使其正常工作,但是我必须记住在进行更改时更新这两个代码。此外,我将需要更多例程来执行相同的操作,因此我真的需要弄清楚如何让我的例程可用于多项 Activity 。

非常感谢大家! :-D

最佳答案

试试这个。更改此行:

new AlertDialog.Builder(this)

到:

new AlertDialog.Builder(sender)

关于java - 从 Android 应用程序对象显示对话框(或需要可用于多个 Activity 的例程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689082/

相关文章:

android - 从程序中启动隐藏的 Android 设置 Activity

android - onSaveInstanceState/onRestoreInstanceState 和 View 状态

java - 长字符串的 AES 解密期间出现 BadPaddingException

java - 如何为 RESTeasy Multipart Provider 创建 Jandex 索引

Java:从泛型类填充动态列表

java - (Android | Java) AndroidAsyncHttp (Loopj) 在继续线程之前完成 Web 请求

java - 如何使用其属性查找 DOM 节点

java: FileInputStream.read()读取一个字节但可以读取一个字符,这是怎么回事?

java - 我们可以在另一个类中传递注入(inject)的对象吗

android - IndexOutOfBoundsException 对我来说没有意义