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 версии 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