我正在尝试抽象并创建一个Action Bar(适用于Android 2.2)。因此我自己写出来。出于某种原因,我无法让HomeScreen更新操作栏。它可能不是处理程序问题,比我想的更基本。
我的类图就像
IBar(接口) - > Impleby-> ActionBarActivity(抽象类) - > extendedby->主屏幕
使用类God
公共静态方法。
Only relevant pieces of code below
ActionBarActivity,由我的所有活动使用。
public abstract class ActionBarActivity extends Activity implements IBar {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actionbar);
connectionStatus = (ImageView) findViewById(R.id.connectStatus);
connectionStatus.setOnClickListener(this);
if (God.isConnectedToServer)
connectionStatus.setImageDrawable(this.getResources().getDrawable(
R.drawable.connect));
else
connectionStatus.setImageDrawable(this.getResources().getDrawable(
R.drawable.disconnect));
connectionStatus.setEnabled(true);
public void setConnectionStatus(boolean status) {
Bundle bundle = new Bundle() ;
bundle.putSerializable(God.BARVALUES, (IBar) this) ;
Message message = updateBar.obtainMessage() ;
message.setData(bundle);
message.sendToTarget();
}
@Override
public boolean handleMessage(Message barData) {
IBar barValues = (IBar) barData.getData()
.getSerializable(God.BARVALUES);
--->>>if (barValues.getConnectionStatus())
connectionStatus.setImageDrawable(this.getResources().getDrawable(
R.drawable.connect));
else if (!barValues.getConnectionStatus())
connectionStatus.setImageDrawable(this.getResources().getDrawable(
R.drawable.disconnect));
return false;
}
public abstract boolean getConnectionStatus();
HomeScreen扩展了ActionBarActivity
public class HomeScreen extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
try {
God.switchServer((ActionBarActivity)this, God.mCruiseOnServer);
} catch (InvalidServerDNSorIPException e) {
Toast.makeText(this, "Unable to connect to server", Toast.LENGTH_LONG).show();
return ;
}
上帝阶级,公共静止。
public class God {
public static boolean switchServer(ActionBarActivity activity, String newServer) {
...
activity.setConnectionStatus(true) ;
....
}
操作栏上的图像按钮
<ImageView
android:id="@+id/connectStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/refresh"
android:contentDescription="@string/connectionStatus" />
编辑:我在调试器下运行了这个,并且我已经执行了---&gt;&gt;&gt;线。这意味着我的connection.setImageDrawable被调用,但由于某种原因,我的UI上没有显示。我在这里遗漏了一些非常基本的东西。
答案 0 :(得分:0)
根本原因是基类有一个R.layout.actionbar,它与R.id.actionbar而不是我的主屏幕的实例不同。