始终勾选列表视图中的选定项目

Posted

技术标签:

【中文标题】始终勾选列表视图中的选定项目【英文标题】:Keep the list view selected items ticked all the time 【发布时间】:2021-06-22 13:06:04 【问题描述】:

在我的应用程序中,我从用户那里获得了有关电影的详细信息并将它们保存在 sqlite 数据库中,我从这个数据库中创建了列表视图,它显示带有复选框的电影名称,用户可以在其中选中以将电影标记为他的电影之一/她的最爱。

我有一个单独的列来存储电影是否是收藏夹......最初我将所有电影声明为“不收藏”,所以当用户选中复选框并按下按钮“标记为收藏夹”时该电影对应的收藏夹列的值从“不收藏”更新为“收藏”

我想要做的是,即使在重新启动应用程序后,也始终在复选框中选中用户选择的电影。由于状态不应该改变。

创建列表视图的代码

public class DisplayActivity extends AppCompatActivity 

DataBaseHelper myDb;
ListView movieNList;
Button addFavoritesB,button;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display);

    movieNList =(ListView) findViewById(R.id.moviesLV);
    myDb=new DataBaseHelper(this);
    addFavoritesB=(Button) findViewById(R.id.addButton);
    button=(Button) findViewById(R.id.button);

    ArrayList<String> theList=new ArrayList<>();
    Cursor data=myDb.getData();

    if (data.getCount()==0)
        Toast.makeText(DisplayActivity.this,"The Database is empty",Toast.LENGTH_SHORT).show();
    else

        //Adds data to the list view
        while(data.moveToNext())
            theList.add(data.getString(1));
            Collections.sort(theList);
            ListAdapter listAdapter=new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice,theList);
            movieNList.setAdapter(listAdapter);
        
    

    buttonAction();
    viewAll();

XML 代码

 <ListView
    android:id="@+id/moviesLV"
    android:layout_
    android:layout_
    android:choiceMode="multipleChoice"
    app:layout_constraintBottom_toTopOf="@+id/addButton"
    app:layout_constraintTop_toBottomOf="@+id/constraintLayout"
    tools:ignore="MissingConstraints"
    android:listSelector="@color/teal_200"
    tools:layout_editor_absoluteX="0dp">

</ListView>

还有没有办法将复选框图标从勾号更改为星号?

【问题讨论】:

【参考方案1】:

您应该使用带有自定义适配器的回收器视图。您可以根据 Favorite column 值更新选中/Star imageview。

这是一个用于回收器视图的自定义适配器的示例:

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.ViewHolder> 

ArrayList<String> mMovies;

public MoviesAdapter(ArrayList<String> movies) 
    mMovies = movies;


@Override
public MoviesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
    return new ViewHolder(view);


@Override
public void onBindViewHolder(MoviesAdapter.ViewHolder holder, int position) 
    holder.mName.setText(mMovies.get(position));
    if (COLUMN_FAVURITE) ?
        holder.imageView.setImageResource(R.drawable.star) 
        : holder.imageView.setImageResource(R.drawable.checkBox);



@Override
public int getItemCount() 
    return mMovies.size();


public class ViewHolder extends RecyclerView.ViewHolder 

    public TextView mName;
    public ImageView mFavourite;
    

    public ViewHolder(View itemView) 
        super(itemView);

        mName = (TextView) itemView.findViewById(R.id.name);
        mFavourite = (ImageView) itemView.findViewById(R.id.favourite);

    

【讨论】:

以上是关于始终勾选列表视图中的选定项目的主要内容,如果未能解决你的问题,请参考以下文章

如何取消选择选定的列表视图项目?

选定的 WPF 列表框绑定仅更新视图中的项目

Android,如何从我的数据库更新列表视图中的选定项目?

Xamarin 列表视图选定项目更改图标颜色

Nativescript Vue(移动应用程序) - 如何将模式列表视图中的选定项目数据传递回主应用程序?

如何在swift中最初打开一个表视图到选定的详细视图