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 (не директно от Activity от 2.3) промените все още не са налице, когато се извиква contentChanged, но при разширяване от Activity от 2.3 извикването на метода е навреме. За момента грозен хак, който изглежда работи, е: имам суперклас за MyActivity, който се простира от ActionBarActivity, там замествам всички методи 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