我有一个摘要Activity
,因为我的大多数活动都共享相同的菜单:
public abstract class ActivityBase extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menubar, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//...
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//...
}
}
现在,当我使用该类(继承它)时,findViewById()
方法不再起作用了。无论我是否在该特定类中继承它,一旦它在继承树中的某个地方,它就不再起作用了。例如:
public class SomeOther extends ActivityBase {
}
public class Home extends Activity {
@Override
public void onCreate (Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.button); // fails, NullPointerException
}
这可能是什么原因,更重要的是,我该如何解决?
答案 0 :(得分:1)
在我的情况下,这项工作是完美的(试试这个)......
public abstract class ActivityBase extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//..
return true;
}
}
和
public class MyActActivity extends ActivityBase {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e("HI", "Hello");
TextView tv=(TextView)findViewById(R.id.Settings_phoneNumbersT1);
Log.e("HI", tv.toString());
}
}
和main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/Settings_phoneNumbersT1"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff" android:text="Hellofffff"/>
</LinearLayout>
所以,我不认为它是Abstract ActivityBase类的问题。
答案 1 :(得分:0)
试试这个......
Button b = (Button)Home.this.findViewById(R.id.button);
它确保你现在的类的findviewById被调用而不是超类的..
答案 2 :(得分:0)
NullPointerException
是由其他地方引起的,只是用这种方法表现出来。如果您派生自Application
并尝试致电getSharedPreferences
,则会失败,但您无法确定它。