嘿那里我试图让Listener
工作,应用程序运行,一切都很好但是当我在ListView
中选择一个项目时出现Null pointer exception
错误< / p>
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);
}
}
清单
<?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>
答案 0 :(得分:1)
你可以摆脱lv.setOnItemSelectedListener
,因为你要延长ListFragment
,你应该覆盖onListItemClick
。
来自doc:
This method will be called when an item in the list is selected. Subclasses should override.
here您可以找到文档
答案 1 :(得分:0)
此处您的类使用ListFragment进行扩展,因此您需要使用 onListItemClick 而不是 OnItemSelectedListener 覆盖ListView。
有关详细信息,请转到Here