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时,但是当从Activity 2.3扩展时,更改尚未到位。方法调用是准时的。暂时似乎工作的丑陋黑客是:我有一个MyActivity的超类,它从ActionBarActivity扩展,在那里我覆盖所有setContentView方法,如下所示:
@Override
public void setContentView(View view) {
super.setContentView(view);
afterSetContentView = true;
onContentChanged();
}
在我的onContentChanged中,我检查afterConConViewView然后使用findViewById。
更新2:看起来,它是支持库中的一个错误,我已经报告并且已经分配了,所以他们现在正在修复它:https://code.google.com/p/android/issues/detail?id=59445&q=onContentChanged&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars