已经一整天了,我正在尝试做我认为这是一项简单的任务:实现一个片段,根据互联网可用性显示不同的视图。
需要明确的是:尝试在没有连接的情况下启动 youtube 应用程序,您将看到一个带有“重试”按钮的漂亮错误屏幕。当您单击按钮时,片段(仅视图或其他内容)会重新加载,如果互联网现在可用,则显示正确的项目。
我在 ViewPager 中有两个片段。我希望第一个片段显示错误消息和“重试”按钮。当按下按钮时,就像 youtube 应用程序一样,如果网络可用,我想重新加载片段的内容并显示正确的内容。
我尝试从内部和主要活动中替换整个片段,以编程方式更改视图和其他内容,但没有任何成功。
请帮忙!
编辑:
我可以显示错误视图,我只是在 OnCreateView 方法中检查互联网可用性:
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
final View view;
if(CheckNetwork.isInternetAvailable(getActivity())){
view = inflater.inflate(R.layout.fragment_with_connection, container, false);
}
else{
view = inflater.inflate(R.layout.layout_no_connectivity, container, false);
Button button = (Button)view.findViewById(R.id.button_retry);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mview) {
//DUNNO WAT TO DO
}
});
}
编辑:我已经使用@daro2189 的答案来解决我的问题,他略有不同:在这种情况下,我只需要更改视图寻呼机中两个片段之一的视图。
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_with_connection, container, false);
initNoInternetView(view);
if (!CheckNetwork.isInternetAvailable(getActivity())) {
if (noInternetView != null) {
View child = view.findViewById(R.id.child );
child.setVisibility(View.GONE);
noInternetView.setVisibility(View.VISIBLE);
}
} else {
getInfoFromInternet();
}
return view;
}
private void initNoInternetView(final View view) {
if(view == null)
return;
RelativeLayout parentView = (RelativeLayout)view.findViewById(R.id.layout_no_connectivity);
LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);
noInternetView = inflater.inflate(R.layout.layout_no_connectivity, null);
noInternetView.setVisibility(View.GONE);
parentView.addView(noInternetView);
final Button button = (Button)noInternetView.findViewById(R.id.button_retry);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mview) {
if(!CheckNetwork.isInternetAvailable(getActivity())){
if(noInternetView != null){
noInternetView.setVisibility(View.VISIBLE);
noInternetView.bringToFront();
}
} else {
if(noInternetView != null){
noInternetView.setVisibility(View.GONE);
View child = view.findViewById(R.id.child);
child.setVisibility(View.VISIBLE);
getInfoFromInternet();
}
}
}
});
}