Listview setOnItemClickListener - не работает для пользовательского списка, но работает в простое listview
У меня проблема с get listview item
при нажатии listitem.
Я получил listview item
для simple listview
(Arrayadapter), но у меня проблема с лицом для custom listview
.
Я использую
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);
}
});
В Logcat введите значение null
:
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
Вероятно, вы возвращаете null
из метода getItem()
вашего пользовательского адаптера, ListviewAdapter
(вы должны добавить код для адаптера). Кроме того, нет необходимости снова устанавливать слушателя на ListView
.
Измените способ getItem()
следующим образом:
@Override
public Object getItem(int position) {
return Questions.get(position);
}
Ответ 2
Попробуйте сделать это для своего списка:
list.setItemsCanFocus(false);
и убедитесь, что элементы внутри вашего списка имеют атрибуты
android:focusable="false"
android:focusableInTouchMode="false"
Ответ 3
вы можете выбрать неправильный адаптер, попробуйте
String selectedFromList = myAdapter.getItemAtPosition(pos).toString();
Ответ 4
Используйте этот
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
попробуйте сделать это.
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);
}
});