我有一个android应用程序,它有一个调用异步进程的DialogFragment(在下面的代码示例中称为“api.Async”)。完成后,我想显示另一个Activity的结果。我一直收到“Fragment [Name] not attached to activity.”。我该如何修复这个问题?一旦完成,我该如何向新Activity发送信息?
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_lookup, null);
builder.setView(view)
.setPositiveButton(R.string.lookup, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
EditText text = (EditText) view.findViewById(R.id.username);
api.Async("GetByID/", text.getText().toString(), new badgerAPI.IApiResultRunnable() {
@Override
public void run(CMAPIResult apiResult) {
if (!apiResult.lmSuccess) {
showError(view.getContext(), "User not found", apiResult.lmErrorMessage).show();
} else {
String badgeuri = apiResult.lmResultDict.optString("badgeuri");
//APPLICATION ERRORS IN FOLLOWING FUNCTION
showBadge(view.getContext(), badgeuri);
}
}
});
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
;
return builder.create();
}
“showBadge”函数非常简单:
private void showBadge(final Context act, String uri){
Intent intent = new Intent(act, DisplayBadge.class);
startActivity(intent);
}
我试过几种不同的方法:
获取活动()
();
[类].this(甚至不会编译)
有什么方法可以绕过片段(在活动完成时关闭),并在结果中显示来自函数的视图?
谢谢你!
2条答案
按热度按时间rlcwz9us1#
您的DialogFragent似乎已在异步行程完成时损毁。若要让它正常运作,请从活动(而非DialogFragment)启动异步行程。
因此,在DialogFragment中,只需回调到Activity中的公共方法,该方法将执行繁重的工作(本例中为
doPositiveClick()
):然后,在调用DialogFragment的Activity中,启动异步进程,并在完成后启动DisplayBadge Activity。
注我已经更改了方法定义和一些代码,因为不再需要传递Context:
wwodge7n2#
一个更简洁的解决方案是在对话框中添加一个接口,就像在回收器适配器中一样。
然后在您的活动中实现类
那就做点什么