Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从广播接收器调用SetContentView()_Android_Broadcastreceiver - Fatal编程技术网

Android 从广播接收器调用SetContentView()

Android 从广播接收器调用SetContentView(),android,broadcastreceiver,Android,Broadcastreceiver,在我的应用程序中有两个类,第一类是InternetActivity,它只扩展活动并将contentview设置为main。以及扩展广播接收器的MyClass 我在main.xml文件中有2个WIFI和GPRS的文本视图和2个图像视图。 当连接发生变化时,会调用brodcast接收器,并根据启用的内容和未启用的内容设置TextView和ImageView的可见性。但它只是显示图像,而不是变化。 这是MyClass.java文件。我该怎么做 public class MyClass extends

在我的应用程序中有两个类,第一类是InternetActivity,它只扩展活动并将contentview设置为main。以及扩展广播接收器的MyClass

我在main.xml文件中有2个WIFI和GPRS的文本视图和2个图像视图。 当连接发生变化时,会调用brodcast接收器,并根据启用的内容和未启用的内容设置TextView和ImageView的可见性。但它只是显示图像,而不是变化。 这是MyClass.java文件。我该怎么做

public class MyClass extends BroadcastReceiver {

private static ImageView wifi_image, gprs_image;
private static TextView wifi_text, gprs_text;

@Override
public void onReceive(Context context, Intent intent) {

    Log.i("IntrntActivity", "Broadcast message receivved");

    LinearLayout layout = new LinearLayout(context);
    LinearLayout.LayoutParams params = new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    View view = View.inflate(context, R.layout.main, layout);

    wifi_image = (ImageView) view.findViewById(R.id.wifi_image);
    gprs_image = (ImageView) view.findViewById(R.id.gprs_image);

    wifi_text = (TextView) view.findViewById(R.id.wifi_text);
    gprs_text = (TextView) view.findViewById(R.id.gprs_text);

    wifi_image.setVisibility(View.GONE);
    wifi_text.setVisibility(View.GONE);
    gprs_image.setVisibility(View.GONE);
    gprs_text.setVisibility(View.GONE);

    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(context.CONNECTIVITY_SERVICE);
    NetworkInfo WIFI = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo Mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (!WIFI.isConnected() && WIFI.isAvailable()) {
        Toast.makeText(context, "WIFI is available but not connected",
                Toast.LENGTH_LONG).show();
    }

    if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable()) {
        wifi_image.setVisibility(View.VISIBLE);
        wifi_text.setVisibility(View.VISIBLE);

    }

    if (Mobile.isConnected()) {
        gprs_image.setVisibility(View.VISIBLE);
        gprs_text.setVisibility(View.VISIBLE);
        Log.i("IntrntActivity", "Mobile isConnected");

        // Toast.makeText(context,"GPRS is available",
        // Toast.LENGTH_LONG).show();
    }

    if (!Mobile.isConnected()) {
        gprs_image.setVisibility(View.GONE);
        gprs_text.setVisibility(View.GONE);
        Log.i("IntrntActivity", "Mobile is Not Connected");
        // Toast.makeText(context,"GPRS is available",
        // Toast.LENGTH_LONG).show();
    }


}

}

附言:它正确地进入了
Mobile.isConnected()
!Mobile.isConnected()
并将其显示在日志文件中,但其可见性没有更改。我是否未正确设置视图?是否可以从此广播接收器调用setContentView(view)?

您还没有将膨胀视图添加到活动内容视图中

您应该在onCreate方法中将所有内容都膨胀并设置为内容视图。然后,广播接收器应仅设置选定视图的可见性

class MyActivity extends Activity {

  private ImageView wifiIcon;

  public void onCreate() {
    setContentView(...);
    wifiIcon = (ImageView) findViewById(...);
  }

  private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      // ...
      wifiIcon.setVisibility( isWifiEnabled ? View.VISIBLE : View.GONE);
    }
  };
}

您需要将接收器放入InternetActivity类中,在那个里注册它并使用已经定义的局部变量。您不需要创建单独的公共BroadcastReceiver实现,只需执行本地实现

像这样:

import android.content.BroadcastReceiver;
import android.content.Context;

public class InternetActivity extends Activity {

    private ImageView image;
    private TextView text;

    private BroadcastReceiver reciever = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
           // do all the checking
           // interact with image and text
        }    
    };
    @Override
    public void onCreate(Bundle state) {
        setContentView(R.layout.....);
        // fill in image and text variables
    }
    @Override
    public void onStart() {
        registerReceiver(receiver, /* your intent filter here */);
    }
    @Override
    public void onStop() {
        unregisterReceiver(receiver);
    }
}

我该怎么做?如何从正在扩展的
BroadcastReceiver()
MyClass
调用setContentView?我费了好大劲才最终完成。还有其他方法吗。。因此,接收时的广播接收器不需要在活动中定义///意味着如何更改整个应用程序的顶栏图像