0

各項目に TextView とチェックボックスが含まれる 12 項目の ListView があります。上下にスクロールしても、各 CheckBox に設定されているチェック ステータスが失われないように、CheckBox のチェック ステータスを永続的に維持することができました。

私が今直面している問題は、ListView の各項目について、対応する CheckBox がチェックされている場合は TextView を ArrayList に追加し、対応する CheckBox がチェックされていない場合は、TextView が含まれている場合は ArrayList から削除する必要があることです。初期化。

以下の getView() メソッドのコードでは、行 "Log.d(TAG, "chosen topic size: " + selectedTopics.size());" 常にゼロを返す??!!

この問題を解決するのを手伝ってください。

getView() :

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View view = null;

    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        view = layoutinflater.inflate(R.layout.list_items_layout, null);

        final ViewHolder holder = new ViewHolder();

        holder.tv = (TextView) view.findViewById(R.id.tvlist_topic);
        holder.cb = (CheckBox) view.findViewById(R.id.cbList_hook);
        holder.iv = (ImageView) view.findViewById(R.id.ivList_delete);

        holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                ItemDesign element = (ItemDesign) holder.cb.getTag();
                element.setChecked(buttonView.isChecked());

                if(element.isChecked()) {
                    if (!chosenTopics.contains(designList.get(position).getTopic()))
                        chosenTopics.add(designList.get(position).getTopic());
                }

                if (!element.isChecked()) {
                    if (!chosenTopics.isEmpty()) {
                    if (chosenTopics.contains(designList.get(position).getTopic()))
                        chosenTopics.remove(position);
                    }
                }
            }
        });

        Log.d(TAG, "chosen topic size: " + chosenTopics.size());
        view.setTag(holder);
        holder.cb.setTag(designList.get(position));

    } else {
        view = convertView;
        ((ViewHolder) view.getTag()).cb.setTag(designList.get(position));
    }

    final ViewHolder holder = (ViewHolder) view.getTag();
    holder.tv.setText(designList.get(position).getTopic());
    holder.cb.setChecked(designList.get(position).isChecked());

    holder.iv.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (holder.cb.isChecked())
                holder.cb.setChecked(false);

            designList.remove(position);
            notifyDataSetChanged();
        }
    });

    return view;
}

ArrayList の初期化をコンストラクターに移動した後の LogCat エラー:

02-12 14:40:14.117: E/AndroidRuntime(22500): FATAL EXCEPTION: main
02-12 14:40:14.117: E/AndroidRuntime(22500): Process:  
com.example.mqtt_designlayout_02, PID: 22500
02-12 14:40:14.117: E/AndroidRuntime(22500):   
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
02-12 14:40:14.117: E/AndroidRuntime(22500):    at 
java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
02-12 14:40:14.117: E/AndroidRuntime(22500):    at 
java.util.ArrayList.remove(ArrayList.java:403)
02-12 14:40:14.117: E/AndroidRuntime(22500):    at 

com.example.mqtt_designlayout_02.listviewadapter.ListViewAdapter$1.onCheckedChanged(ListViewAdapter.java:95)

4

1 に答える 1