SwitchButton в каждом item-e ListView - как настроить, чтобы он влиял именно на объект, отображаемый в этом item-e?

У меня приложение, в котором заучиваются шведские слова. В моем случае ListView состоит из finalArrayList-а, который в свою очередь состоит из двух ArrayList-ов: practiceList (пары слов (sw+eng), которые пользователь учит, они встречаются в "игре") и hideList (пары слов, которые пользователь отключил).

ArrayList<Word> finalArray = new ArrayList<Word>();
    finalArray.addAll(finalPractice);
    finalArray.addAll(finalHide);

Я имею один шаблон для всех элементов ListView, это list_item_layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_weight="33.3">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="swedishWord"
        android:paddingLeft="10dp"
        android:textSize="21sp"
        android:textColor="@color/colorYellow"
        android:id="@+id/textView1"
        android:gravity="center_vertical"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="englishWord"
        android:paddingLeft="10dp"
        android:textSize="17sp"
        android:textColor="@color/colorYellow"
        android:id="@+id/textView2"
        android:gravity="center_vertical"/>

</LinearLayout>


<Switch
    android:id="@+id/switchBox"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_weight="66.6"
    android:textColor="@color/colorYellow"
    android:thumbTint="#1976D2"
    android:paddingRight="40dp"/>

Как видно, у каждого элемента есть switch button. Мне нужно чтобы этим switch-ом можно было перекинуть слово из practiceList-a в hideList и наоборот (чтобы юзер мог "включать" и "отключать" слова).

Как сделать так, чтобы переключение switchButton в item-e влияло именно на отображенный в этом item-е объект, как на объект исходного practiceList-a либо hideList-a (чтобы, собственно, перекинуть объект из одного в другой)?

На всякий случай полный код ListAdapter-a (если вдруг это нужно для ответа):

public class CheckListAdapter extends ArrayAdapter<Word> implements Filterable {

private static final String TAG = "CheckListAdapter";

private Context mContext;
private int mResource;
private int lastPosition = -1;

private ArrayList<Word> mOriginalValues;
private ArrayList<Word> mOriginalValuesFull;

/**
 * Hold variables in a view
 */

static class ViewHolder {
    TextView swedish;
    TextView english;
    Switch switchBox;
}

/**
 * Default constructor for the CheckListAdapter
 * @param context
 * @param resource
 * @param objects
 */

public CheckListAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Word> objects, Context mContext) {
    super(context, resource, objects);
    this.mContext = mContext;
    mResource = resource;

    this.mOriginalValues = objects;
    mOriginalValuesFull = new ArrayList<>(objects);
}

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

    //get the word two examples
    String swedish = getItem(position).getSwedish();
    String english = getItem(position).getEnglish();

    //create the word object with two examples
    Word word = new Word(swedish, english);

    //create the view result for showing the animation
    final View result;

    //Viewholder object
    ViewHolder holder;
    if (convertView == null) {

        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = inflater.inflate(mResource, parent, false);
        holder = new ViewHolder();
        holder.swedish = (TextView) convertView.findViewById(R.id.textView1);
        holder.english = (TextView) convertView.findViewById(R.id.textView2);
        holder.switchBox = (Switch) convertView.findViewById(R.id.switchBox);

        result = convertView;

        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
        result = convertView;
    }

    Animation animation = AnimationUtils.loadAnimation(mContext,
            (position > lastPosition) ? R.anim.loading_down_anim : R.anim.loading_up_anim);
    result.startAnimation(animation);
    lastPosition = position;

    holder.swedish.setText(word.getSwedish());
    holder.english.setText(word.getEnglish());

    return convertView;
}

@NonNull
@Override
public Filter getFilter() {
    return wordFilter;
}

private Filter wordFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        List<Word> filteredList = new ArrayList<>();

        if (constraint == null || constraint.length() == 0) {
            filteredList.addAll(mOriginalValuesFull);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();

            for (Word word : mOriginalValuesFull) {
                if (word.getSwedish().toLowerCase().contains(filterPattern) || word.getEnglish().toLowerCase().contains(filterPattern)) {
                    filteredList.add(word);
                }
            }
        }

        FilterResults results = new FilterResults();
        results.values = filteredList;

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        mOriginalValues.clear();
        mOriginalValues.addAll((ArrayList)results.values);
        notifyDataSetChanged();
    }
};

Ответы (0 шт):