我得到多个ID更点击(ListView中自定义适配器GetView) [英] I get more than one id in one click (ListView custom adapter GetView)

查看:139
本文介绍了我得到多个ID更点击(ListView中自定义适配器GetView)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这样做,当我从列表中单击切换按钮,检索该行的TextView的ID。问题是,当获得多数IDS脉冲,当我滚动太......我不知道该怎么办!

我得到所有这些IDS在我的LogCat中..只有一个点击的位置adeww

我MyAdapter code是在这里:

 公共类MyAdapter扩展ArrayAdapter< Usuari> {        私人最终名单< Usuari>清单;
        私人最终活动范围内;
        公共MyAdapter(Activity上下文,列表< Usuari>名单){
            超(背景下,R.layout.row,清单);
            this.context =背景;
            this.list =清单;
        }        静态类ViewHolder {
            保护的TextView nom_usuari;
            保护切换按钮boto_agregar;
        }
        @覆盖
        公共查看getView(INT位置,查看convertView,父母的ViewGroup){            ViewHolder viewHolder = NULL;
            如果(convertView == NULL){
                LayoutInflater充气= context.getLayoutInflater();
                convertView = inflator.inflate(R.layout.row,NULL);
                viewHolder =新ViewHolder();
                viewHolder.nom_usuari =(TextView中)convertView.findViewById(R.id.nom_usuari);
                viewHolder.boto_agregar =(切换按钮)convertView.findViewById(R.id.boto_agregar);
                viewHolder.boto_agregar.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){                    公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
                        INT为getPosition =(整数)buttonView.getTag(); //这里我们得到我们为使用setTag切换按钮的位置。
                        list.get(为getPosition).setSelected(buttonView.isChecked()); //设置切换按钮的值,以保持其状态。
                        字符串NOM = list.get(为getPosition).getName();
                        如果(器isChecked)
                        {
                            Log.d(SELECCIONAT,NOM);                        }
                        其他
                        {
                            Log.d(DESSELECCIONAT,NOM);                        }
                    }
                });
                convertView.setTag(viewHolder);
                convertView.setTag(R.id.nom_usuari,viewHolder.nom_usuari);
                convertView.setTag(R.id.boto_agregar,viewHolder.boto_agregar);
                }其他{
                viewHolder =(ViewHolder)convertView.getTag();
            }
            viewHolder.boto_agregar.setTag(位置); //这一行是很重要的。
            viewHolder.nom_usuari.setText(list.get(位置).getName());
            viewHolder.boto_agregar.setChecked(list.get(位置).isSelected());
            返回convertView;
        }    }


解决方案

ATENTION!我找到了解决办法!我不得不删除IF和ELSE条件...

我希望它可以帮助你!我花了两个星期来解决它!

 公共类MyAdapter扩展ArrayAdapter< Usuari> {    私人最终名单< Usuari>清单;
    私人最终活动范围内;
    ViewHolder viewHolder;    公共MyAdapter(Activity上下文,列表< Usuari>名单){
        超(背景下,R.layout.row,清单);
        this.context =背景;
        this.list =清单;
    }    静态类ViewHolder {
        保护的TextView nom_usuari;
        保护切换按钮boto_agregar;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        viewHolder = NULL;
        LayoutInflater充气= context.getLayoutInflater();
        convertView = inflator.inflate(R.layout.row,父母,假);
        viewHolder =新ViewHolder();
        viewHolder.nom_usuari =(TextView中)convertView
                .findViewById(R.id.nom_usuari);
        viewHolder.boto_agregar =(切换按钮)convertView
                .findViewById(R.id.boto_agregar);        viewHolder.boto_agregar.setChecked(list.get(位置).isSelected());
        最终诠释一个viewPosition =位置;        viewHolder.boto_agregar
                .setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){                    公共无效onCheckedChanged(CompoundButton buttonView,
                            布尔器isChecked){                        list.get(一个viewPosition).setSelected(
                                buttonView.isChecked());
                        字符串NOM = list.get(一个viewPosition).getName();
                        如果(器isChecked){
                            Log.d(SELECCIONAT,NOM);
                        }其他{
                            Log.d(DESSELECCIONAT,NOM);                        }
                    }
                });        convertView.setTag(viewHolder);
        convertView.setTag(R.id.nom_usuari,viewHolder.nom_usuari);
        convertView.setTag(R.id.boto_agregar,viewHolder.boto_agregar);        viewHolder.boto_agregar.setTag(位置); //这一行是很重要的。
        viewHolder.nom_usuari.setText(list.get(位置).getName());        返回convertView;
    }}

而Usuari类:

 公共类Usuari {        私人字符串NOM;
        选择私人布尔;        公共Usuari(字符串NOM,布尔选择){
            this.nom = NOM;
            this.selected =选择;
        }        公共字符串的getName(){
            返回NOM;
        }        公共布尔isSelected(){
            返回所选择的;
        }        公共无效的setSelected(布尔选择){
            this.selected =选择;
        }
    }

I want to do that when I click a ToggleButton from the list, retrieve the ID of the row textview. The problem is that when most IDS pulse are obtained, and when I scroll too ... I do not know what to do!

I get all these IDS in my LogCat.. with only ONE CLICK on the position "adeww"

My MyAdapter code is here:

public class MyAdapter extends ArrayAdapter<Usuari>{

        private final List<Usuari> list;
        private final Activity context;


        public MyAdapter(Activity context, List<Usuari> list) {
            super(context, R.layout.row, list);
            this.context = context;
            this.list = list;
        }

        static class ViewHolder {
            protected TextView nom_usuari;
            protected ToggleButton boto_agregar;
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder viewHolder = null;
            if (convertView == null) {
                LayoutInflater inflator = context.getLayoutInflater();
                convertView = inflator.inflate(R.layout.row, null);
                viewHolder = new ViewHolder();
                viewHolder.nom_usuari = (TextView) convertView.findViewById(R.id.nom_usuari);
                viewHolder.boto_agregar = (ToggleButton) convertView.findViewById(R.id.boto_agregar);


                viewHolder.boto_agregar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the togglebutton using setTag.
                        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of togglebutton to maintain its state.
                        String nom = list.get(getPosition).getName();
                        if(isChecked)
                        {
                            Log.d("SELECCIONAT",nom);

                        }
                        else
                        {
                            Log.d("DESSELECCIONAT",nom);

                        }
                    }
                });


                convertView.setTag(viewHolder);
                convertView.setTag(R.id.nom_usuari, viewHolder.nom_usuari);
                convertView.setTag(R.id.boto_agregar, viewHolder.boto_agregar);
                } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }


            viewHolder.boto_agregar.setTag(position); // This line is important.            
            viewHolder.nom_usuari.setText(list.get(position).getName());
            viewHolder.boto_agregar.setChecked(list.get(position).isSelected());




            return convertView;
        }

    }

解决方案

ATENTION! I found the solution!! I had to delete the IF and ELSE condition...

I hope that it helps you! I spent two weeks to fix it!

  public class MyAdapter extends ArrayAdapter<Usuari> {

    private final List<Usuari> list;
    private final Activity context;
    ViewHolder viewHolder;

    public MyAdapter(Activity context, List<Usuari> list) {
        super(context, R.layout.row, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView nom_usuari;
        protected ToggleButton boto_agregar;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        viewHolder = null;
        LayoutInflater inflator = context.getLayoutInflater();
        convertView = inflator.inflate(R.layout.row, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.nom_usuari = (TextView) convertView
                .findViewById(R.id.nom_usuari);
        viewHolder.boto_agregar = (ToggleButton) convertView
                .findViewById(R.id.boto_agregar);

        viewHolder.boto_agregar.setChecked(list.get(position).isSelected());
        final int viewPosition = position;

        viewHolder.boto_agregar
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {

                        list.get(viewPosition).setSelected(
                                buttonView.isChecked());
                        String nom = list.get(viewPosition).getName();
                        if (isChecked) {
                            Log.d("SELECCIONAT", nom);
                        } else {
                            Log.d("DESSELECCIONAT", nom);

                        }
                    }
                });

        convertView.setTag(viewHolder);
        convertView.setTag(R.id.nom_usuari, viewHolder.nom_usuari);
        convertView.setTag(R.id.boto_agregar, viewHolder.boto_agregar);

        viewHolder.boto_agregar.setTag(position); // This line is important.
        viewHolder.nom_usuari.setText(list.get(position).getName());

        return convertView;
    }

}

And the Usuari class:

public class Usuari {

        private String nom;
        private boolean selected;

        public Usuari(String nom, boolean selected) {
            this.nom = nom;
            this.selected =selected;
        }

        public String getName() {
            return nom;
        }

        public boolean isSelected() {
            return selected;
        }

        public void setSelected(boolean selected) {
            this.selected = selected;
        }
    } 

这篇关于我得到多个ID更点击(ListView中自定义适配器GetView)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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