列表视图setOnItemClickListener - 不工作的自定义列表视图,但工作到简单的ListView [英] Listview setOnItemClickListener - Not working for custom listview but working into simple listview

查看:117
本文介绍了列表视图setOnItemClickListener - 不工作的自定义列表视图,但工作到简单的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我与获得列表视图项当点击列表项的问题。
我得到列表视图项简单的ListView (Arrayadapter),但我对自定义列表视图。

我使用

  listview.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<> myAdapter,查看MyView的,诠释POS,长mylng){  //字符串selectedFromList =(字符串)listview.getItemAtPosition(POS)
   字符串selectedFromList =(字符串)adapter.getItem(POS)    的System.out.println(选定值>>>>>>>>>>>>中+ selectedFromList);    SelectedAnswer.setAnswer(selectedFromList);              }          });

进入logcat的给我值:

  I /的System.out(1238):选定值>> >> >> >> >> >>空

main.class

 保护无效的onCreate(捆绑savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.quiz_questions);        列表视图=(ListView控件)findViewById(R.id.questions_list);        GoToNextQuestion();
  }私人无效GoToNextQuestion(){
    // TODO自动生成方法存根     currentGame =((Quizapplication)getApplication())getCurrentGame();
    currentQ = currentGame.getNextQuestion();       setQuestions();    listview.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<> myAdapter,查看MyView的,诠释POS,长mylng){  //字符串selectedFromList =(字符串)listview.getItemAtPosition(POS)
   字符串selectedFromList =(字符串)adapter.getItem(POS)    的System.out.println(选定值>>>>>>>>>>>>中+ selectedFromList);    SelectedAnswer.setAnswer(selectedFromList);              }          });
} 私人无效setQuestions(){
    //设置可用的选项
    清单<串GT;答案= currentQ.getQuestionOptions();
    的System.out.println(的选项&gt价值;>>>>>>>>>>>>:+答案);
     // ArrayAdapter<字符串> myadapter =新ArrayAdapter<串GT;(getApplicationContext(),android.R.layout.simple_list_item_single_choice,答案);    // ArrayAdapter<字符串>适配器=新ArrayAdapter<串GT;(这一点,R.layout.quiz_questions_listitem,答案);             //致力于为简单的适配器      适配器=新ListviewAdapter(这一点,答案);     listview.setAdapter(适配器);
     //listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
 }

编辑:

 公共类ListviewAdapter延伸BaseAdapter {公开名单<串GT;问题;公共活动背景;
公共LayoutInflater吹气;
公共ListviewAdapter(Activity上下文,列表<串GT;答案){
    超();    this.context =背景;
    this.Questions =答案;    this.inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}@覆盖
公众诠释的getCount(){
    // TODO自动生成方法存根
    返回Questions.size();
}@覆盖
公共对象的getItem(INT位置){
    // TODO自动生成方法存根
    返回null;
}@覆盖
众长getItemId(INT位置){
    // TODO自动生成方法存根
    返回0;
}公共静态类ViewHolder
{    TextView的txtquestion;
}@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    // TODO自动生成方法存根    ViewHolder持有人;
    如果(convertView == NULL)
    {
        持有人=新ViewHolder();
        convertView = inflater.inflate(R.layout.quiz_questions_listitem,NULL);
        holder.txtquestion =(TextView中)convertView.findViewById(R.id.textView_option);        convertView.setTag(保持器);      / * convertView.setOnClickListener(新View.OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                // TODO自动生成方法存根                 System.out.println(\">>>>>>>>>>>>>>>>>>>>>>>>>>\"+v.toString());
                notifyDataSetChanged();                 SelectedAnswer.setAnswer(v.toString());
            }
        }); * /
    }
    其他
        支架=(ViewHolder)convertView.getTag();    holder.txtquestion.setText(Questions.get(位置));    返回convertView;
}}


解决方案

您可能返回的getItem()自定义适配器的方法, ListviewAdapter (您应该添加code适配器)。此外,也没有必要设置监听器上的的ListView 试。

修改你的的getItem()的方法是这样的:

  @覆盖
公共对象的getItem(INT位置){
    返回Questions.get(位置);
}

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;  
}   

}

解决方案

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);  
}  

这篇关于列表视图setOnItemClickListener - 不工作的自定义列表视图,但工作到简单的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆