Marco Faion Marco Faion - 3 months ago 19
Android Question

Android Null Pointer Exeption on OnClickListener line

I have a simple test application with a

GridView
containing an array of buttons, I'm trying to perform an operation (any operation) touching one of these buttons.

The main code is this:

package com.example.convert;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;

public class convert extends Activity {
//private ListView List;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

String [] elenco = {
"ciao","questo","รจ","un esempio","Configurazione"
};

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.oggetto,R.id.testogg,elenco);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(arrayAdapter);
Button btn = (Button) (findViewById(R.id.testogg));


btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
setContentView(R.layout.oggetto);
}

});

}

}


The
main.xml
is the following:

<?xml version="1.0" encoding="utf-8"?>

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>


And
oggetto.xml
contains the following lines:

<?xml version="1.0" encoding="utf-8"?>

<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:text="@+id/TextView01"
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/testogg">
</Button>


But when I try to run the application it return me a
NullPointerExeption
on the
btn.setOnClickListener(new OnClickListener())
line.

May be that happen because the buttons have the same id? If this is the case, how can I obtain repeated buttons with different ids?

Thanks for your help!

Answer

May be that happen cause the buttons have the same id

That could be. But it also shows something is wrong if that's even the case. Each button specified in XML is only created once. You can't create multiple buttons just by calling findViewById() multiple times or by passing in the resource ID.

But the problem comes because you call setContentView(R.layout.main);

findViewById() will ONLY return non-null views for views contained in main.xml. Your context knows nothing about your other XML layouts because they're not inflated.

You should probably start with simpler programs and go through the tutorials to get a feeling for how android views work.

Comments