【问题标题】:Layout not invalidating upon network state change布局不会在网络状态更改时失效
【发布时间】:2016-04-14 15:10:38
【问题描述】:

我想在有 Internet 连接时在活动中显示名为“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],但似乎没有任何效果。

我哪里做错了?

【问题讨论】:

    标签: java android android-broadcastreceiver


    【解决方案1】:

    在挣扎了将近一天之后,这就是解决我的问题的方法:

    我在我的活动中添加了以下代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多