Java 在listview中使用searchview功能时,保持复选框处于选中状态

Java 在listview中使用searchview功能时,保持复选框处于选中状态,java,android,listview,checkbox,searchview,Java,Android,Listview,Checkbox,Searchview,我是编程新手,几天来一直在寻找解决问题的方法 我用searchview创建了一个listview,然后添加了复选框。 复选框的问题是,当你搜索某样东西时,它们不会保持它们的位置。 例如: 如果我有5个字 项目1 奶酪 项目2 香肠 项目3 面包 项目4 番茄酱 项目5 柠檬 我检查第一个单词(项目1奶酪)并搜索柠檬(项目5),柠檬被检查,因为它位于第一个位置(项目1) 图片示例: 检查第一个位置: 检查一个单词并搜索它 如何设置检查的不是位置而是名称? 我在想,如果你可以用一个数组来做这

我是编程新手,几天来一直在寻找解决问题的方法

我用searchview创建了一个listview,然后添加了复选框。 复选框的问题是,当你搜索某样东西时,它们不会保持它们的位置。 例如: 如果我有5个字

项目1 奶酪

项目2 香肠

项目3 面包

项目4 番茄酱

项目5 柠檬

我检查第一个单词(项目1奶酪)并搜索柠檬(项目5),柠檬被检查,因为它位于第一个位置(项目1)

图片示例:

  • 检查第一个位置:
  • 检查一个单词并搜索它
  • 如何设置检查的不是位置而是名称? 我在想,如果你可以用一个数组来做这件事,当你选中某个东西时,它会进入数组并保持在选中状态,当你取消选中它时,它会返回到另一个数组。不幸的是,我不知道该怎么做。(我已经试过了)

    也许你也可以给每个职位分配ID,但我不知道除了给每个职位分配ID之外还有没有其他解决方案,因为它应该在200多个职位之后

    对于我在Listview中使用的复选框(android:choiceMode=“multipleechoice”) 有些导入用于代码中的其他函数。(工具栏、抽屉等)

    这是我的密码:

    StorageActivity.java

    import androidx.annotation.NonNull;
    import androidx.annotation.VisibleForTesting;
    import androidx.appcompat.app.ActionBarDrawerToggle;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.SearchView;
    import androidx.appcompat.widget.Toolbar;
    import androidx.core.view.GravityCompat;
    import androidx.drawerlayout.widget.DrawerLayout;
    
    import android.content.Intent;
    import android.icu.text.Transliterator;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.SparseBooleanArray;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Filter;
    import android.widget.ImageButton;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.google.android.material.navigation.NavigationView;
    
    import java.lang.reflect.Array;
    import java.text.DateFormatSymbols;
    import java.util.ArrayList;
    
    public class StorageActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    
    ListView listView;
    String[] spices = {"Ajowan","Anis","Annatto","Bergkümmel","Betram","Brotklee","Eberraute","Essigbaum","Harissa","Herbes","Ingwer","Knoblauch","Koriander","Mandel"};
    SearchView searchView;
    ArrayList<String> selected = new ArrayList<>();
    
    ArrayAdapter<String> arrayAdapter;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_storage);
    
        listView = findViewById(R.id.lvspices);
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,spices);
        listView.setAdapter(arrayAdapter);
    
    
        searchView = findViewById(R.id.search_spices);
    
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                StorageActivity.this.arrayAdapter.getFilter().filter(query);
    
                return false;
            }
    
            @Override
            public boolean onQueryTextChange(String newText) {
                StorageActivity.this.arrayAdapter.getFilter().filter(newText);
    
                return false;
            }
        });
    
    import androidx.annotation.NonNull;
    导入androidx.annotation.VisibleForTesting;
    导入androidx.appcompat.app.ActionBarDrawerToggle;
    导入androidx.appcompat.app.appcompat活动;
    导入androidx.appcompat.widget.SearchView;
    导入androidx.appcompat.widget.Toolbar;
    导入androidx.core.view.GravityCompat;
    导入androidx.drawerlayout.widget.drawerlayout;
    导入android.content.Intent;
    导入android.icu.text.transiterator;
    导入android.os.Bundle;
    导入android.text.Editable;
    导入android.text.TextWatcher;
    导入android.util.SparseBooleanArray;
    导入android.view.Menu;
    导入android.view.MenuItem;
    导入android.view.view;
    导入android.widget.AdapterView;
    导入android.widget.ArrayAdapter;
    导入android.widget.Filter;
    导入android.widget.ImageButton;
    导入android.widget.ListView;
    导入android.widget.TextView;
    导入android.widget.Toast;
    导入com.google.android.material.navigation.NavigationView;
    导入java.lang.reflect.Array;
    导入java.text.DateFormatSymbols;
    导入java.util.ArrayList;
    公共类StorageActivity扩展AppCompatActivity实现NavigationView.OnNavigationItemSelectedListener{
    列表视图列表视图;
    字符串[]香料={“Ajowan”、“Anis”、“Anatto”、“Bergkümmel”、“Betram”、“Brotklee”、“Eberraute”、“Essigbaum”、“Harissa”、“Herbs”、“Ingwer”、“Knoblauch”、“Koriander”、“Mandel”};
    搜索视图搜索视图;
    选定的ArrayList=新建ArrayList();
    ArrayAdapter ArrayAdapter;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u存储);
    listView=findViewById(R.id.lvs);
    arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u multiple\u selection,spices);
    setAdapter(arrayAdapter);
    searchView=findviewbyd(R.id.search\u spices);
    searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
    @凌驾
    公共布尔值onQueryTextSubmit(字符串查询){
    StorageActivity.this.arrayAdapter.getFilter().filter(查询);
    返回false;
    }
    @凌驾
    公共布尔onQueryTextChange(字符串newText){
    StorageActivity.this.arrayAdapter.getFilter().filter(newText);
    返回false;
    }
    });
    
    activity_storage.xml

    <androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    tools:context=".StorageActivity">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="0dp">
    
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
    
            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/green"
                android:minHeight="?attr/actionBarSize"
                android:theme="?attr/actionBarTheme"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">
    
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
    
                    <TextView
                        android:id="@+id/toolbar_title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="@string/home_screen"
                        android:textAppearance="@style/ToolBarTheme"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toStartOf="@+id/notiButton"
                        app:layout_constraintHorizontal_bias="0.473"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintVertical_bias="0.454" />
    
                    <ImageButton
                        android:id="@+id/notiButton"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_marginEnd="16dp"
                        android:layout_marginRight="16dp"
                        android:background="@drawable/ic_notifications"
                        android:contentDescription="NULL"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintVertical_bias="0.0" />
    
                    <androidx.cardview.widget.CardView
                        android:id="@+id/notification_circle"
                        android:layout_width="10dp"
                        android:layout_height="10dp"
                        android:visibility="visible"
                        app:cardBackgroundColor="@color/red"
                        app:cardCornerRadius="50dp"
                        app:layout_constraintEnd_toEndOf="@+id/notiButton"
                        app:layout_constraintTop_toTopOf="@+id/notiButton">
    
    
                        <androidx.constraintlayout.widget.ConstraintLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">
    
    
                            <TextView
                                android:id="@+id/notification_number"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text=""
                                android:textColor="@color/white"
                                android:textStyle="bold"
                                app:layout_constraintEnd_toEndOf="parent"
                                app:layout_constraintStart_toStartOf="parent"
                                app:layout_constraintTop_toTopOf="parent" />
    
    
                        </androidx.constraintlayout.widget.ConstraintLayout>
    
    
                    </androidx.cardview.widget.CardView>
    
    
                </androidx.constraintlayout.widget.ConstraintLayout>
    
    
            </androidx.appcompat.widget.Toolbar>
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    
    
    
        <androidx.appcompat.widget.SearchView
            android:id="@+id/search_spices"
            app:queryHint="Search Spice"
            app:iconifiedByDefault="false"
            android:layout_margin="0dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ebecf0">
    
        </androidx.appcompat.widget.SearchView>
    
        <ListView
            android:id="@+id/lvspices"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:choiceMode="multipleChoice"
            android:background="@color/beige"
            tools:listitem="@layout/support_simple_spinner_dropdown_item"/>
    
    
    </LinearLayout>
    
    </androidx.drawerlayout.widget.DrawerLayout>
    
    
    
    提前谢谢你的帮助