Постоянно отмечайте выбранные элементы в представлении списка галочками

#java #android #sqlite #listview #mobile-development

Вопрос:

В моем приложении я получил подробную информацию о фильмах от пользователя и сохранил их в базе данных sqlite , из этой базы данных я создал listview, который отображает названия фильмов с флажками, в которых пользователь может отметить фильм как один из своих любимых.

У меня есть отдельный столбец для хранения, является ли фильм любимым или нет…. изначально я объявил все фильмы «не избранными», поэтому, когда пользователь устанавливает флажок и нажимает кнопку «отметить как избранное», значение столбца «избранное», соответствующее этому фильму, обновляется с «не избранное»на » избранное».

что я хочу сделать , так это постоянно отмечать выбранные пользователем фильмы в флажке, даже после перезапуска приложения. Как и в государстве, менять не следует.

Код для создания представления списка

 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_width="412dp"
    android:layout_height="414dp"
    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:

Вы должны использовать представление переработчика с пользовательским адаптером. Вы можете обновить просмотр изображения с отметкой/звездочкой на основе значения столбца Избранное.

Вот пример пользовательского адаптера для просмотра переработчика:

 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);

    }
}
 

}