Android 当类中的布尔值更改时更新GUI

Android 当类中的布尔值更改时更新GUI,android,Android,我试图让我的活动在另一个类中的布尔值更改时更新ImageView 因此,我有一些计时器,它从我的第一个onCreate开始 我的类ConnectionControl有一个布尔值,该值设置为true或false,以确定我的应用程序是否可以访问特定的http主机。 现在我的问题是:如何在活动中自动更改ImageView以显示布尔值? 我已经研究了观察者模式、事件监听器、广播接收器,但我一直在寻找正确的解决方案。 另外,我想在其他活动中使用听力 到目前为止,有效的方法是为每个活动启动/停止计时器,并在

我试图让我的活动在另一个类中的布尔值更改时更新ImageView

因此,我有一些计时器,它从我的第一个onCreate开始

我的类ConnectionControl有一个布尔值,该值设置为true或false,以确定我的应用程序是否可以访问特定的http主机。 现在我的问题是:如何在活动中自动更改ImageView以显示布尔值? 我已经研究了观察者模式、事件监听器、广播接收器,但我一直在寻找正确的解决方案。 另外,我想在其他活动中使用听力


到目前为止,有效的方法是为每个活动启动/停止计时器,并在run方法中更新ImageView。但我的猜测是,必须有一种绕过冗余的方法。

我认为您正在搜索AsyncTask,通过使用它,您可以异步调用webservice,在成功调用webservice后,我们可以处理获取的数据

只需浏览这篇文章:

我想你需要这个:来自android.com

public void onClick(View v) {
  new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
     protected Bitmap doInBackground(String... urls) {
         return loadImageFromNetwork(urls[0]);
     }

     protected void onPostExecute(Bitmap result) {
         mImageView.setImageBitmap(result);
     }
 }
有关AsyncTask的更多信息,请参见链接:

以下是我是如何完成的

我为自定义标题栏做了一个布局文件,它有一个ImageView

<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content">

    <ImageView android:id="@+id/title_statusimg"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:src="@drawable/connected" android:layout_centerVertical="true"
        android:layout_alignParentRight="true" />

    </RelativeLayout>
</merge> 
}

应使用此状态图像的每个活动都会扩展StatusActivity而不是Activity


希望我涵盖了所有内容,至少对我来说是有效的。

据我所知,我必须为我的所有活动添加一个嵌套类,否则如何从“外部”引用到活动的ImageView?这就是我想要避免的。
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content">

    <ImageView android:id="@+id/title_statusimg"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:src="@drawable/connected" android:layout_centerVertical="true"
        android:layout_alignParentRight="true" />

    </RelativeLayout>
</merge> 
<include layout="@layout/titlebar" />
public class StatusActivity extends Activity {

private String CONNECTION_STATUS = "app.CONNECTION_STATUS";
private ImageView conn;

@Override
protected void onResume() {
    super.onResume();
    IntentFilter iFilter = new IntentFilter(CONNECTION_STATUS);
    registerReceiver(mBroadcastReceiver, iFilter);

    conn = (ImageView) findViewById(R.id.title_statusimg);
    if (ConnectionControl.isOnline()) {
        conn.setImageResource(R.drawable.connected);
    } else {
        conn.setImageResource(R.drawable.nconnected);
    }
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mBroadcastReceiver);
}


private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ConnectionControl.isOnline()) {
            conn.setImageResource(R.drawable.connected);
        } else {
            conn.setImageResource(R.drawable.nconnected);
        }
    }
};