複数選択<カスタマイズ>
複数選択<カスタマイズ>の例です。

チェックボックスの動作をします。
単一選択<カスタマイズ>と同じ方法で実現できます。
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private static final String[] data = {
            "北海道", "青森県", "岩手県", "宮城県"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MultiSelectAdapter adapter = new MultiSelectAdapter(this, data);
        ListView listView = new ListView(this);
        listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        listView.setAdapter(adapter);
        setContentView(listView);

        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> av, View view, int position, long id) {
                        adapter.setSelectedIndex(position);
                    }
                }
        );

    }
}


MultiSelectAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

public class MultiSelectAdapter  extends ArrayAdapter<String> {
    private LayoutInflater mInflater;
    private int mSelectedIndex = -1;

    MultiSelectAdapter(Context context, String[] data) {
        super(context, 0);
        addAll(data);
        mInflater = LayoutInflater.from(context);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;
        if (view == null) {
            view = mInflater.inflate(R.layout.item_layout, parent, false);
        }

        TextView textView = (TextView)view.findViewById(R.id.text_view);
        CheckBox checkBox = (CheckBox) view.findViewById(R.id.check_box);
        String msg = getItem(position);
        textView.setText(msg);
        boolean chk = checkBox.isChecked();
        if(position == mSelectedIndex){
            checkBox.setChecked(!chk);
        }
        return view;
    }
    void setSelectedIndex(int index) {
        mSelectedIndex = index;
        notifyDataSetChanged();
    }
}
    

チェック値を取得してそれを反転します。

boolean chk = checkBox.isChecked();
if(position == mSelectedIndex){
    checkBox.setChecked(!chk);
}
iteem_select.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <!-- フォーカスを持ったり、クリックイベントを拾わないようにする -->
    <CheckBox
        android:id="@+id/check_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="false"
        />
    <TextView
        android:id="@+id/text_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="24sp"
        android:layout_gravity="center_vertical"
        />
</LinearLayout>


単一選択<カスタマイズ>と比べるとRadioButtonがCheckBoxに置き換わっただけです。