从活动调用片段方法但视图为空

时间:2014-10-13 11:25:59

标签: android android-fragments

我正在检查主要活动中的互联网连接。如果连接丢失,我想在片段中显示重新连接的消息。例如:如果我在主要活动中运行以下代码,我的应用程序正在崩溃。

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。

我可以做些什么来解决这个问题?

3 个答案:

答案 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();
}

它将显示一个包含所需信息的简单对话框。