我正在检查主要活动中的互联网连接。如果连接丢失,我想在片段中显示重新连接的消息。例如:如果我在主要活动中运行以下代码,我的应用程序正在崩溃。
ConversationFragment conv1 = new ConversationFragment();
conv1.showReconnecting();
这是片段中的showReconnecting
方法:
public void showReconnecting() {
final RelativeLayout rel=(RelativeLayout)rootView.findViewById(R.id.reconnecting);
rel.setVisibility(View.VISIBLE);
}
我知道为什么我的应用程序崩溃,因为rootView
中设置了onCreateView
,当我从活动rootView
调用此方法时返回null。
我可以做些什么来解决这个问题?
答案 0 :(得分:1)
试试这个(假设重新连接的视图在片段中,你的片段在屏幕上可见),
public void showReconnecting() {
if (conv1 != null && conv1.getView()!=null) {
final RelativeLayout rel=(RelativeLayout)conv1.getView().findViewById(R.id.reconnecting);
rel.setVisibility(View.VISIBLE);
}
}
如果conv1不可用,请将其变为类变量。
答案 1 :(得分:0)
好吧,看看这个和你的解释,我认为你不能在不创建所述片段的情况下调用与视图相关的方法(例如片段)。如果片段仅用于显示重新连接,则选项只是将一些代码放入活动中并使用Toast.makeText(....)。show();
通知用户您正在尝试重新连接。因此,而不是conv1.showReconnecting();
而不是Toast.makeText(context,"Reconnecting", Toast.LONG).show();
,而是在AsyncTask中执行必要的后台工作。
我希望这会有所帮助。
答案 2 :(得分:0)
根据你想做的事,一个简单的ProgressDialog
将完成这项工作。你可以从你的ChatFragment
开始,就像这样:
首先,在你的片段上声明它:
private ProgressDialog connectiongProgressDialog;
然后,当您想要显示它时,请使用:
connectiongProgressDialog = ProgressDialog.show(getActivity(), "My title", "Reconnecting");
如果要取消它,请使用:
if (connectiongProgressDialog != null){
connectiongProgressDialog .dismiss();
}
它将显示一个包含所需信息的简单对话框。