ImageButton是' null'分配后

时间:2015-02-17 23:12:00

标签: java android android-button

这是我第一次创建Android应用,但我不确定如何解决此问题。我试图通过ID将ImageButton变量指向现有的ImageButton,但我不断获得NullPointerException。这是代码:

    ...
    import android.widget.ImageButton;

    public class StartActivity extends ActionBarActivity {
        ImageButton addButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
                addButton = (ImageButton) findViewById(R.id.add_category_button);
        }...

ImageButton位于布局card_categories中。这是该布局的XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/main_page"
android:weightSum="1">


    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/add_category_button"
        android:layout_gravity="right"
        android:background="@drawable/add_button"
        android:width="50dp"
        android:height="50dp"
    />
</LinearLayout>

我不确定问题是不正确的id,还是什么,但它没有正确地提取XML中的ImageButton。谢谢你的帮助!

更新:我尝试在ImageButton之后分配setContentView(R.layout.card_categories),但它仍为空。

OnClickListener myCardsHandler = new OnClickListener() {
    public void onClick(View v) {
        setContentView(R.layout.card_categories);
        addButton = (ImageButton) findViewById(R.id.add_category_button);
        loadCategories(dbHandler, categories);
    }
};

2 个答案:

答案 0 :(得分:0)

您在setContentView方法中设置了错误的布局。因此,编译器在那里找不到该名称的任何ImageButton并不奇怪。

要么充实card_categories:

setContentView(R.layout.activity_start);

或将ImageButton放在您当前设置的布局中。

答案 1 :(得分:0)

试试这个

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.card_categories);
       addButton = (ImageButton) findViewById(R.id.add_category_button);
       addButton.setOnClickListener(myCardsHandler);
   }

   OnClickListener myCardsHandler = new OnClickListener() {
       public void onClick(View v) {

           loadCategories(dbHandler, categories);
       }
   };