0

私は次のシナリオを持っています:アンドロイドアップ、アンドロイド1.6以降と互換性があります。すべてのアクティビティの下部に、アクティビティのみを開始するトグルボタンのセットがあります。理由を聞かないでください、それがリクエストでした:)これらのボタンにすべての画面で同じことをさせると、私は次のように考えました:

  1. レイアウトをxmlファイルに入れ、すべてのアクティビティレイアウトに入れます
  2. Activity を拡張するクラスを作成し、すべてのボタンに onClick メソッドを割り当てる
  3. ToggleButton がチェックされている場合、他のすべてのボタンを checked="false" に設定し、ボタンの操作を実行します。

onCreate() をオーバーライドするときに、BaseActivity に固執しています。ボタンを取得して onClick リスナーを割り当てるにはどうすればよいですか?

public class BaseActivity extends Activity {
    private ToggleButton menuHome;

    @Override
    public void onCreate(Bundle savedInstanceState) {
             //this does not work as it cannot find R.id.menu_home)
        menuHome = (ToggleButton) findViewById(R.id.menu_home);
    }
}
4

3 に答える 3

1

BaseActivity を拡張する他のアクティビティで、OnCreate メソッドを見てください。このように見えますか?

public class YourActivity extends BaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        base.Oncreate(saveInstanceState);     

        setContentView(R.layout.YourLayout);

        // Other code here...
    }
}

順序に関係しています...コンテンツビューを設定していないため、トグルボタンは存在しません。これを試して:

public class YourActivity extends BaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.YourLayout); // Set your content view first.

        base.Oncreate(saveInstanceState);     



        // Other code here...
    }
}
于 2012-03-26T18:31:25.487 に答える
1

有効な xml ファイルまたはランタイム オブジェクトの初期化を使用して、GUI を初期化する必要があります。アクティビティで setContentView を使用してみてください。コードは xml をロードしていないため、menu_home が初期化されていません。

http://developer.android.com/reference/android/app/Activity.html

これが正しいアプローチであるかどうかはわかりません。外部コンポーネントを使用して仕事をすることを検討します: http://developer.android.com/guide/topics/ui/custom-components.html

于 2012-03-26T18:31:56.087 に答える
0

setContentView(R.layout.your_layout)を呼び出す必要があります。ここで、your_layoutは、ボタンR.id.menu_homeを含むレイアウトです。現在、アクティビティにレイアウトを提供していないため、ボタンを検索する階層はありません。

于 2012-03-26T18:30:02.963 に答える