0

ListView各行が a と a で構成される がありtextviewますcheckbox

ユーザーはそれぞれTextViewの をクリックすることができ、一度クリックすると、またはDialogBoxのいずれかを選択することが期待される場所に が表示されます。YesNo

彼が [いいえ] を選択すると、ユーザーがクリックCheckBoxした次のTextView項目が自動的にチェックされる必要があります。

私が直面している問題は、ユーザーがどちらを選択しても、リストTextBoxの最後が常にチェックされ、選択されたの隣にはチェックされないことです。CheckBoxTextView

デバッグ後、アダプタ クラスのメソッドが最後の行で停止するため、これが発生していることに気付きgetView()ました。したがって、最後の行が常に選択されます。各行にタグを設定して、checkboxそれに応じてチェックできるようにしましたが、どちらもCheckboxesチェックされませんでした。

この問題について何か助けていただければ幸いです。

....

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    .....
    holder.text.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(final View v) 
        {
            final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle("Materials");
            builder.setMessage("Did you require any materials to fix this error?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    String clickedError;            
                    clickedError = holder.text.getText().toString();        

                    Intent intent = new Intent(mContext, Material.class);
                    intent.putStringArrayListExtra("materialList", materialList);
                    intent.putExtra("clickedError", clickedError);
                    intent.putExtra("repairID", repairID);
                    ((Activity)mContext).startActivityForResult(intent, 1);
                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                    //holder.chk.setChecked(true); // This ticks the last checkbox of the list.

                    if(holder.chk.getTag() == v.getTag())
                    {
                        holder.chk.setChecked(true);
                    }   
                }
            });
            builder.show();

        }
    });
4

2 に答える 2

1

CheckBox は TextView を拡張します。CheckBox.setText(CharSequence | int) を使用してテキストを CheckBox に設定し、TextView を削除します (もちろん、チェックの問題は解決しません)。あなたの問題に関して - ほとんどの AdapterView がビューを再利用するためです。チェックされたアイテムの情報をどこかに保存し、getView で setChecked(checkedItems.get(pos)) を呼び出します。

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

        holder.chk.setChecked(checkedItems.get(position))

        .....

        builder.setNegativeButton("No", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {
                //holder.chk.setChecked(true); // This ticks the last checkbox of the list.

                if(holder.chk.getTag() == v.getTag())
                {
                    holder.chk.setChecked(true);
                    checkedItems.put(position, true);
                }
            }
        });
    }

checkedItems は SparseBooleanArray です

于 2013-08-20T13:25:11.477 に答える