RecyclerView и SQLite Custom OnClickListener - PullRequest
0 голосов
/ 14 января 2020

Привет всем. Я пытаюсь создать фитнес-приложение, в котором пользователь может создавать свои собственные тренировки. Я пытаюсь создать это через Recycler View и базу данных SQLite. До сих пор мне удалось создать успешную систему добавления тренировки в базу данных и удалить ту же самую. Что я не смог сделать, так это OnClickListener для элемента Recycler View. Мне удалось создать OnClickListener для позиции, но я действительно хочу сохранить ранее отредактированные действия как onlclicklistener для определенного элемента представления recyler.

Это то, что я создал до сих пор, и я хочу создать:

This is state of my RecyclerView before I add workout

When I click FloatingActionButton I go to this activity where I enter information about my workout

After I press

When I press my pluss ImageView I have popup alert dialog where I can choose which color of plus I want to (Basically changing ImageView)

I am wondering how to set previously changed ImageView in new activity which will be called by onclicklistener of

Что мне действительно нужно, так это сохранить красный значок плюс вместо синего (рисунок 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...