Listview setOnItemClickListener - Not working for custom listview but working into simple listview

五迷三道 提交于 2019-12-11 01:39:17

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!