Привет всем. Я пытаюсь создать фитнес-приложение, в котором пользователь может создавать свои собственные тренировки. Я пытаюсь создать это через Recycler View и базу данных SQLite. До сих пор мне удалось создать успешную систему добавления тренировки в базу данных и удалить ту же самую. Что я не смог сделать, так это OnClickListener для элемента Recycler View. Мне удалось создать OnClickListener для позиции, но я действительно хочу сохранить ранее отредактированные действия как onlclicklistener для определенного элемента представления recyler.
Это то, что я создал до сих пор, и я хочу создать:
Что мне действительно нужно, так это сохранить красный значок плюс вместо синего (рисунок 3 и 4 ) и загрузить его, когда я нажму «сначала». Я также хочу сделать его многоразовым, чтобы я мог добавить тренировку снова.
Это код моего адаптера:
private Context mContext;
private Cursor cursor;
private ListItemClickListener listItemClickListener;
public WorkoutsAdapter (Context mContext,Cursor cursor,ListItemClickListener listItemClickListener)
{
this.mContext = mContext;
this.cursor = cursor;
this.listItemClickListener = listItemClickListener;
}
@NonNull
@Override
public WorkoutsAdapter.WorkoutsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item,parent,false);
return new WorkoutsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull WorkoutsAdapter.WorkoutsViewHolder holder, int position) {
if(!cursor.moveToPosition(position))
{
return;
}
long id = cursor.getLong(cursor.getColumnIndex(WorkoutsContract.WorkoutsEntry._ID));
holder.itemView.setTag(id);
String name = cursor.getString(cursor.getColumnIndex(WorkoutsContract.WorkoutsEntry.WORKOUT_NAME));
holder.workout_name.setText(name);
}
@Override
public int getItemCount() {
return cursor.getCount();
}
public class WorkoutsViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView workout_name;
public WorkoutsViewHolder(@NonNull View itemView) {
super(itemView);
workout_name = itemView.findViewById(R.id.word);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
listItemClickListener.onClick(v,getAdapterPosition());
}
}
public void swapCursor (Cursor newCursor) {
if (cursor != null)
{
cursor.close();
}
cursor = newCursor;
if (newCursor != null)
{
this.notifyDataSetChanged();
}
}
Это мой второй фрагмент, где хранится представление и где я хочу применить clicklistener, чтобы создать сохраненную активность:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag_2_layout, container, false);
recyclerView = v.findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
fab = (FloatingActionButton) v.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),SecondActivity.class));
}
});
DbHelper dbHelper = new DbHelper(getActivity());
mydatabase = dbHelper.getWritableDatabase();
Cursor cursor = getAllTasks();
adapter = new WorkoutsAdapter(getActivity(),cursor,this);
recyclerView.setAdapter(adapter);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
long id = (long) viewHolder.itemView.getTag();
removeTask(id);
adapter.swapCursor(getAllTasks());
}
}).attachToRecyclerView(recyclerView);
return v;
}
private void removeTask(long id) {
mydatabase.delete(WorkoutsContract.WorkoutsEntry.TABLE_NAME,
WorkoutsContract.WorkoutsEntry._ID + "=" +id,null);
Toast.makeText(getActivity(),"Wokrout Is Deleted Successfully",Toast.LENGTH_SHORT).show();
}
private Cursor getAllTasks ()
{
return mydatabase.query(WorkoutsContract.WorkoutsEntry.TABLE_NAME,
null,
null,
null,
null,
null,
WorkoutsContract.WorkoutsEntry.COLUMN_TIMESTAMP);
}
@Override
public void onStart() {
super.onStart();
adapter.swapCursor(getAllTasks());
}
@Override
public void onClick(View view, int position) {
long id = (long) view.getTag();
System.out.println(position);