Question

hey there I'm trying to get the Listener to work, the application runs and all is fine but when i select an item in the ListView I get a Null pointer exception error

java.lang.RuntimeException: Unable to start activity ComponentInfo{code.me/code.me.QuestionActivity}: java.lang.NullPointerException

public class ItemListFragment extends android.app.ListFragment 
{
    ListView lv;
    Context c;
    List<Question> questions= new ArrayList<Question>();
    Integer[] Q_Id ;
    String[] AskerUserName =   {"Jack"      ,"John"    ,"Lio"      ,"Sam"         ,"Mike"        };
    String[] AnswererUserName ={"Jacob"     ,"Mario"   ,"Tom"      ,"Shon"        ,"Jasmine"     };
    String[] Qusetion =        {"What?"     ,"Where?"  ,"When"     ,"How?"        ,"Who?"        };
    String[] Answer =          {"jjjjjjjjjj","llllllll","fffffffff","eeeeeeeeeeee","oooooooooooo"};

    @Override
    public View onCreateView( LayoutInflater inflater, 
        ViewGroup container,
        Bundle savedInstanceState )
    {


        View view = inflater.inflate(R.layout.frag1, container, false);


        lv = (ListView) view.findViewById(android.R.id.list);

        for (int i = 0;i<4;i++){
            int qid =  i;
            String AUName = AskerUserName[i].toString();
            String AnUName = AnswererUserName[i].toString();
            String Ans = Answer[i].toString();
            String Ques = Qusetion[i].toString();
            Question question = new Question(qid, AUName, AnUName, Ans, Ques);
            questions.add(question);




        }
        QuestionAdapter QuestAd = new QuestionAdapter(getActivity(),questions);
        lv.setAdapter(QuestAd);

        QuestAd.notifyDataSetChanged();




        return view;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        Intent i = new Intent(getActivity(),QuestionActivity.class);
        i.putStringArrayListExtra("answers", questions.get(position).getAnswers());
        i.putExtra("question", questions.get(position).getQuestion().toString());
        startActivity(i);
        super.onListItemClick(l, v, position, id);  

    }






        // TODO Auto-generated method stub







}

QuestionActivity

public class QuestionActivity extends Activity {
    String Question = "";
    List<String> Answers = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.question_activity);

        Intent i = new Intent(); //This should be getIntent();

        Answers.addAll(i.getStringArrayListExtra("answers"));

        Question = i.getSerializableExtra("question").toString();

        TextView question = (TextView) findViewById(id.questiontxt);
        question.setText(Question);




    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        return super.onCreateOptionsMenu(menu);
    }



}

MANIFEST

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="code.me"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:allowTaskReparenting="false" android:debuggable="true">
        <activity
            android:name="code.me.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

       <activity android:name=".QuestionActivity"/>




    </application>

</manifest>
Was it helpful?

Solution

you can get rid of lv.setOnItemSelectedListener, since you are extending ListFragment you should override onListItemClick .

From the doc:

This method will be called when an item in the list is selected. Subclasses should override.  

here you can find the documentation

OTHER TIPS

Here your class is extends with ListFragment so you need to override with onListItemClick instead of OnItemSelectedListener for ListView.

For more details go Here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top