2016-04-13 29 views
0

我想在互联网连接时在活动中显示名为“content”的RelativeLayout,并在没有连接时将其替换为另一个名为“noInternet”的布局。 应用程序打开时应执行相同的逻辑。布局在网络状态变化时不会失效

我跟着thisthisthis 我创建了一个网络接收器是这样的:

public class ConnectionChangeReceiver extends BroadcastReceiver { 
    static boolean connectivity; 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) 
     { 
      connectivity = true; 
     } 
     else { 
      connectivity = false; 
     } 
    } 

    public static boolean hasConnectivity(){ 
     return connectivity; 
    } 
} 

在我的清单,我添加了这个正在申请标签:

<receiver android:name="com.myPackage.ConnectionChangeReceiver" 
    android:label="NetworkConnection"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
    </intent-filter> 
</receiver> 

和清单标签下:

<uses-permission android:name="android.permission.INTERNET" /> 

我有我的活动布局是这样的:

<RelativeLayout....> 
    .... 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:id="@+id/noInternet" 
     android:visibility="gone"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:id="@+id/content"> 
    ... 
</RelativeLayout> 

要切换我在活动的onCreate()方法写了这个代码的布局:

if(ConnectionChangeReceiver.hasConnectivity()){ 
    noInternet.setVisibility(View.GONE); 
    content.setVisibility(View.VISIBLE); 
} else { 
    content.setVisibility(View.GONE); 
    noInternet.setVisibility(View.VISIBLE); 
} 

的问题是,布局都应该打开更改互联网连接,但他们不。 我试着invalidate()[见this]和处理程序[见this],但似乎没有任何工作。

我哪里错了?

回答

0

与它挣扎了将近一天后,这里是固定我的问题:

我加在我的活动下面的代码:

@Override 
public void onBackPressed(){ 
    finish(); 
}