0

アクションバーを抽象化して作成しようとしています(Android 2.2用)。したがって、私はそれを自分で書いています。何らかの理由で、ホームスクリーンでアクションバーを更新できません。それはハンドラーの問題ではないかもしれません。私が推測するよりも基本的なものです。

私のクラス ダイアグラムは、IBar (インターフェイス) ->implementedby-> ActionBarActivity (抽象クラス) ->extendedby-> HomeScreen のようなもので、class God public static メソッドを使用します。

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" />

編集:これをデバッガーで実行しましたが、実行が --->>> 行に達しました。つまり、connection.setImageDrawable が呼び出されますが、何らかの理由で UI に表示されません。ここで本当に基本的なことが欠けています。

4

1 に答える 1

0

根本的な原因は、基本クラスに R.layout.actionbar があったことでした。これは、私のホーム画面ではなく、R.id.actionbar のインスタンスとは異なるインスタンスでした。

于 2012-07-24T04:01:04.087 に答える