问题
I have problem with the get the listview item when click listitem.
I Got listview item for the simple listview(Arrayadapter), but I have face problem for the custom listview.
I am using
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> myAdapter, View myView, int pos, long mylng) {
//String selectedFromList = (String) listview.getItemAtPosition(pos);
String selectedFromList = (String) adapter.getItem(pos);
System.out.println("selected value >> >> >> >> >> >>"+selectedFromList);
SelectedAnswer.setAnswer(selectedFromList);
}
});
Into Logcat give me the null value :
I/System.out( 1238): selected value >> >> >> >> >> >>null
main.class
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz_questions);
listview = (ListView) findViewById(R.id.questions_list);
GoToNextQuestion();
}
private void GoToNextQuestion() {
// TODO Auto-generated method stub
currentGame = ((Quizapplication)getApplication()).getCurrentGame();
currentQ = currentGame.getNextQuestion();
setQuestions();
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> myAdapter, View myView, int pos, long mylng) {
//String selectedFromList = (String) listview.getItemAtPosition(pos);
String selectedFromList = (String) adapter.getItem(pos);
System.out.println("selected value >> >> >> >> >> >>"+selectedFromList);
SelectedAnswer.setAnswer(selectedFromList);
}
});
}
private void setQuestions() {
// set the available options
List<String> answers = currentQ.getQuestionOptions();
System.out.println("value of the options >>>>>>>>>>>>>:"+answers);
//ArrayAdapter< String> myadapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_single_choice ,answers);
//ArrayAdapter< String> adapter = new ArrayAdapter<String>(this, R.layout.quiz_questions_listitem, answers);
// working for the simple adapter
adapter = new ListviewAdapter(this,answers);
listview.setAdapter(adapter);
//listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
}
EDIT:
public class ListviewAdapter extends BaseAdapter{
public List<String> Questions;
public Activity context;
public LayoutInflater inflater;
public ListviewAdapter(Activity context,List<String> answers) {
super();
this.context = context;
this.Questions = answers;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Questions.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public static class ViewHolder
{
TextView txtquestion;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.quiz_questions_listitem, null);
holder.txtquestion = (TextView) convertView.findViewById(R.id.textView_option);
convertView.setTag(holder);
/* convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>"+v.toString());
notifyDataSetChanged();
SelectedAnswer.setAnswer(v.toString());
}
});*/
}
else
holder=(ViewHolder)convertView.getTag();
holder.txtquestion.setText(Questions.get(position));
return convertView;
}
}
回答1:
You probably return null from the getItem() method of your custom adapter, ListviewAdapter(you should add the code for the adapter). Also, there is no need to set the listener on the ListView again.
Modify your getItem() method like this:
@Override
public Object getItem(int position) {
return Questions.get(position);
}
回答2:
Try to do this for your list :
list.setItemsCanFocus(false);
and make sure that items inside your list had attributes
android:focusable="false"
android:focusableInTouchMode="false"
回答3:
you may select wrong adapter, try this
String selectedFromList = myAdapter.getItemAtPosition(pos).toString();
回答4:
Use this
public void onItemClick(AdapterView<?> myAdapter, View myView, int pos, long mylng) {
String selectedFromList = myAdapter.getItemAtPosition(pos);
System.out.println("selected value >> >> >> >> >> >>"+selectedFromList);
SelectedAnswer.setAnswer(selectedFromList);
}
});
回答5:
try to Do this.
public void onItemClick(AdapterView<?> myAdapter, View myView, int pos, long mylng) {
//String selectedFromList = (String) listview.getItemAtPosition(pos);
ListviewAdapter adapter=(ListviewAdapter) listview.getAdapter();
String selectedFromList = (String) adapter.getItem(pos);
System.out.println("selected value >> >> >> >> >> >>"+selectedFromList);
SelectedAnswer.setAnswer(selectedFromList);
}
});
来源:https://stackoverflow.com/questions/12328804/listview-setonitemclicklistener-not-working-for-custom-listview-but-working-in