-1

多くの例を見てきましたが、私の問題によるものはありません...私の場合、カスタムアダプターを備えたカスタムリストビューがあります。チェックボックスexは主に非表示になり、オプションメニューボタンをクリックするとチェックボックスが表示され、フォーカス可能性もtrueに設定されますリストビューはリスト項目のクリックリスナーを受信しなくなりました...チェックボックスの状態をSparseBooleanArrayに保存するコードもありますが、最大の問題は、チェックボックスのチェックを呼び出さないため、getView ()にあるため、チェック状態が誤って保存されることですたとえば、リストビューに最初に5つのアイテムがある場合... パブリックビューからの位置 getView(int position,View convertView,ViewGroup parent)私のコードでは、最後のアイテムが6の位置にあるため、6になります。

@Override
    public View getView(final int position,View convertView,ViewGroup parent)
    {
        //currentPosition=position;
        Log.v("Position",""+position);
        Log.v("ConvertView", ""+convertView);
        View row=convertView;

        if(row==null)
        {
            LayoutInflater inflater=((Activity)context).getLayoutInflater();
            row=inflater.inflate(layoutResourceId, parent,false);
            holder=new Feedbacks();
            holder.lvGuestName=(TextView)row.findViewById(R.id.guestName);
            holder.checkBox=(CheckBox)row.findViewById(R.id.clearCheck);

            holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
            {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
                {
                    if(isChecked)
                    {                           
                        checks.put(position, true);
                        System.out.println("checking at pos:"+position);
                    }
                    else
                    {                           
                        checks.put(position, false);
                        System.out.println("unchecking at pos:"+position);
                    }

                }                   

            });


            row.setTag(holder);

        }       
        else
        {               
            holder=(Feedbacks)row.getTag();

        }

        if(showCheckbox)
        {
            holder.checkBox.setVisibility(View.VISIBLE);        
        }
        else
        {
            holder.checkBox.setVisibility(View.GONE);
        }
        holder.lvGuestName.setText(feedbackList.get(position).getGuestName());
        holder.checkBox.setChecked((checks.get(position)));
        System.out.println("seting check at pos:"+position);    
        return row;                                     

    }

}                   

チェックボックスがチェックされている/チェックされていないときにgetView()が呼び出されないため、それぞれの位置を取得できないため、現在、 0の位置のアイテムを クリックしても位置が6になります... iリストアイテムのクリックでチェックボックスのフォーカス可能性がfalseで簡単に実行できることを知っていますが、新しいことを学びたいと思っているので、リストビューでチェックされたそれぞれのチェックボックスの位置を取得するにはどうすればよいですか ...どんな種類の助けも私にとって最も高く評価され、価値があります...前もって感謝しますif(isChecked) {
checks.put(position, true); System.out.println("checking at pos:"+position); }
checks.put(position,true);

4

1 に答える 1

1

あなたのコードでは、条件が間違っているため、コードを次のように変更し、OnCheckedChangeListener を onClickListener に変更しました。

 @Override
    public View getView(final int position,View convertView,ViewGroup parent)
    {
        View row=convertView;
        Feedbacks holder = null;

        if(row==null)
        {
            LayoutInflater inflater=((Activity)context).getLayoutInflater();
            row=inflater.inflate(layoutResourceId, parent,false);
            holder=new Feedbacks();
            row.setTag(holder);
        }       
        else
        {               
            holder=(Feedbacks)row.getTag();
        }

        holder.lvGuestName=(TextView)row.findViewById(R.id.guestName);
        holder.checkBox=(CheckBox)row.findViewById(R.id.clearCheck);

        holder.checkBox.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(holder.checkBox.isChecked())
                {                           
                    checks.put(position, true);
                    System.out.println("checking at pos:"+position);
                }
                else
                {                           
                    checks.put(position, false);
                    System.out.println("unchecking at pos:"+position);
                }

            }
        });

        if(showCheckbox)
        {
            holder.checkBox.setVisibility(View.VISIBLE);        
        }
        else
        {
            holder.checkBox.setVisibility(View.GONE);
        }

        holder.lvGuestName.setText(feedbackList.get(position).getGuestName());
        holder.checkBox.setChecked((checks.get(position)));
        System.out.println("seting check at pos:"+position);    
        return row;                                     

    }
于 2012-06-13T09:48:14.763 に答える