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