Android 如何以编程方式将视图更改为片段(当internet不可用时)
这已经是一整天了,我一直在努力做我认为很简单的事情:实现一个片段,根据互联网的可用性显示不同的视图 需要明确的是:尝试在没有连接的情况下启动youtube应用程序,你会看到一个漂亮的错误屏幕,上面有一个“重试”按钮。当您单击按钮时,片段(仅视图或其他内容)将重新加载,如果internet现在可用,则显示正确的项目 我在一个ViewPager里有两个片段。我希望第一个片段显示一条错误消息和一个“重试”按钮。当按下按钮时,就像youtube应用程序一样,如果网络可用,我想重新加载片段的内容并显示正确的内容 我试着从内部和主活动中替换整个片段,以编程方式更改视图和其他内容,但没有成功 请帮忙 编辑: 我可以显示错误视图,我只需检查OnCreateView方法中的internet可用性:Android 如何以编程方式将视图更改为片段(当internet不可用时),android,android-fragments,Android,Android Fragments,这已经是一整天了,我一直在努力做我认为很简单的事情:实现一个片段,根据互联网的可用性显示不同的视图 需要明确的是:尝试在没有连接的情况下启动youtube应用程序,你会看到一个漂亮的错误屏幕,上面有一个“重试”按钮。当您单击按钮时,片段(仅视图或其他内容)将重新加载,如果internet现在可用,则显示正确的项目 我在一个ViewPager里有两个片段。我希望第一个片段显示一条错误消息和一个“重试”按钮。当按下按钮时,就像youtube应用程序一样,如果网络可用,我想重新加载片段的内容并显示正确
@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();
}
}
}
});
}
请提供一些代码 我的建议: 在主布局中,应该有id为main\u fragment的FragmentLayout 在活动创建方法“noInternetView()”中,该方法在id=main上显示一个带有按钮“no internet”的片段 当没有internet运行函数noInternetView()时,其他显示正常视图 一些代码:
//This code put into noInterneView() - because it opens fragment with no internet layout
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
NoInternetFragment bdf = new NoInternetFragment();
ft.replace(R.id.main_fragment, bdf);
ft.addToBackStack(null);
ft.commit();
通过更改片段,使用上面的代码打开普通片段
以及:
我希望我能帮忙:)
---更新-----
private View noInternetView=null;
@凌驾
创建视图上的公共视图(最终布局扁平充气机、最终视图组容器、最终捆绑保存状态){
视图=充气机。充气(R.layout.fragment_,带_连接,容器,假);
initNoInternetView(视图);
如果(!CheckNetwork.isInternetAvailable(getActivity())){
如果(noInternetView!=null)
noInternetView.setVisibility(View.VISIBLE);
}
}
私有void initNoInternetView(视图){
如果(视图==null)
返回;
RelativeLayout parentView=(RelativeLayout)view.findViewById(R.id.parent_视图);
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
noInternetView=充气机。充气(R.layout.layout\u无连接,空);
parentView.addView(noInternetView);
final Button Button=(Button)noInternetView.findviewbyd(R.id.Button\u重试);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图mview){
如果(!CheckNetwork.isInternetAvailable(getActivity())){
如果(noInternetView!=null){
noInternetView.setVisibility(View.VISIBLE);
noInternetView.bringToFront();
}
}否则{
如果(noInternetView!=null)
noInternetView.setVisibility(View.GONE);
}
}
});
}
//XML布局
//记住,在xml布局(带有连接的片段)中,您的主布局是一个id为parent的//RelativeLayout视图
//大概是这样的:
//这是你的浏览页面
不要浪费时间,使用这个库:我可以更改片段以显示错误屏幕。我通过简单地检查OnCreateView方法中的连接可用性来实现这一点。我不能做的是在按下“重试”按钮时更改视图。要更改布局,必须重写onClick()方法,然后使用函数检查布局,您明白我的意思吗?或者我可以提供更多的代码吗?请提供一些代码。我的问题是我不知道如何改变布局,我每次都失败了。谢谢!我终于做到了!我的问题稍有不同:我只需要更改视图页面中两个片段中的一个片段的视图(我在问题中写了一些错误)。请提供此库的简要概述。还要说明哪些具体部分可能有助于回答这个问题,以及如何回答。这个链接将来可能会改变,你的答案应该是自洽的
If(noInternetConnection){
//open fragment with no internet laout - code above
} else {
//open fragment with normal layout
}
private View noInternetView = null;
@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)
noInternetView.setVisibility(View.VISIBLE);
}
}
private void initNoInternetView(View view){
if(view == null)
return;
RelativeLayout parentView = (RelativeLayout)view.findViewById(R.id.parent_view);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
noInternetView = inflater.inflate(R.layout.layout_no_connectivity, null);
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);
}
}
});
}
//XML layout
//Remember to in xml layout (fragment_with_connection) your main layout was a //RelativeLayout with id parent_view
//something like this:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
//here put your view pager
</RelativeLayout>