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 扩展时,方法调用准时。暂时一个看起来有效的丑陋黑客是:我有一个 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