始终勾选列表视图中的选定项目
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);
【讨论】:
以上是关于始终勾选列表视图中的选定项目的主要内容,如果未能解决你的问题,请参考以下文章