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