Вызов SetContentView () из широковещательного приемника - PullRequest
3 голосов
/ 21 марта 2011

В моем приложении есть два класса, один - InternetActivity, который только расширяет Activity и устанавливает contentview в main. и MyClass, который расширяет приемник вещания.

У меня есть 2 TextView и 2 ImageView WIFI и GPRS в файле main.xml. Когда происходят изменения в соединениях, вызывается приемник 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();
    }


}

}

P.S .: Он правильно входит в Mobile.isConnected() и !Mobile.isConnected() и показывает его в файле журнала, но его видимость не меняется. Не правильно ли я настраиваю вид? и можно ли вызвать setContentView (view) из этого приемника вещания?

Ответы [ 2 ]

11 голосов
/ 21 марта 2011

Вы должны поместить свой приемник в класс 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);
    }
}
5 голосов
/ 21 марта 2011

Вы нигде не добавляете раздутый вид к просмотру содержания своей деятельности?!

В методе 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);
    }
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...