2
public class MyActivity extends ActionBarActivity {

    @Override
    public void onContentChanged() {
        TextView tv = (TextView) findViewById(R.id.asdasd);
        // tv is NULL on Android 2.3
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}

Android デバイス v.4.2 ではfindViewById()正しいビューを返しますが、2.3 では基本的に を返しますnull。違いは何ですか?

更新:私が試したことから:ActionBarActivityから(2.3のActivityから直接ではなく)拡張すると、contentChangedが呼び出されたときに変更がまだ行われていないように思えますが、2.3のActivityから拡張するとメソッド呼び出し時間通りです。当分の間、機能しているように見える醜いハックは次のとおりです。私は、ActionBarActivity から拡張された MyActivity のスーパークラスを持っています。そこで、次のようにすべての setContentView メソッドをオーバーライドします。

@Override
    public void setContentView(View view) {
        super.setContentView(view);
        afterSetContentView = true;
        onContentChanged();
    }

私の onContentChanged 内で、afterSetContentView をチェックしてから、findViewById を使用します。

更新 2: サポート ライブラリのバグのようです。報告して割り当てられたので、現在修正中です: https://code.google.com/p/android/issues/detail?id= 59445&q=onContentChanged&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

4

1 に答える 1