片段对我的问题不是必不可少的(所以不要离开大声笑),但我提到它是为了解释我为什么要这样做。
我正在使用片段,因此根据布局,不同的活动将是容器。因此,我需要此例程可用于多项活动。我有一个通用例程,无论使用哪个活动都需要运行,因此为了不重复代码,我将例程设置为从应用程序对象运行。
如果该代码包含在活动中,则该代码可以工作,但是当放入应用程序对象(并根据需要进行修改)时,它会失败。当我尝试 .show() 对话框时,我收到错误“无法添加窗口 - 令牌 null 不适用于应用程序”。
这是来自需要调用失败例程的活动之一的调用例程:
@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();
}
}
}
我怎样才能让它工作,或者如果这是让这个例程可用于多个活动的完全错误的方法,我怎么能使它可用?
我可以在每个活动中复制代码以使其工作,但是我必须记住在我进行更改时更新两者。此外,我将需要更多的例程,我需要为这些例程做同样的事情,所以我真的需要弄清楚如何让我的例程可用于多项活动。
非常感谢你们!:-D