抽象活动导致findViewById()不起作用

时间:2011-10-17 10:28:17

标签: java android

我有一个摘要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
}

这可能是什么原因,更重要的是,我该如何解决?

3 个答案:

答案 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,则会失败,但您无法确定它。