Hi, it seems to me that I don’t understand something, why, with a long press, after processing OnLongClick, OnClick is processed. Does it really need to do a check in OnClick so that it doesn’t launch it by mistake? This option is similar to a crutch, and not quite successful.

package com.fgurbanov.skynet.Tasklintent.Fragment; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; import android.widget.Toast; import com.fgurbanov.skynet.Tasklintent.TaskPagerActivity; import com.fgurbanov.skynet.Tasklintent.Data.Task; import com.fgurbanov.skynet.Tasklintent.Data.TaskLab; import com.fgurbanov.skynet.Tasklintent.R; import java.util.List; import java.lang.String; import static android.widget.CompoundButton.*; public class TaskListFragment extends Fragment { //private static final int REQUEST_CRIME = 1; private static final String SAVED_SUBTITLE_VISIBLE = "subtitle"; private static final String SAVED_SCREEN_VIEWS = "grid_view"; private static final String SAVED_SELECT_MODE = "select_mode"; private RecyclerView mTaskRecyclerView; private TaskAdapter mAdapter; private TextView mEmptyNotifyTextView; private int mChangedPosition; private boolean mSubtitleVisible; private boolean mGridListView; private boolean mSelectMode; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_task_list, container, false); mTaskRecyclerView = (RecyclerView) view.findViewById(R.id.task_recycler_view); mTaskRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); mEmptyNotifyTextView = (TextView) view.findViewById(R.id.empty_notify_text_view); if (savedInstanceState != null) { mSubtitleVisible = savedInstanceState.getBoolean (SAVED_SUBTITLE_VISIBLE); mGridListView = savedInstanceState.getBoolean (SAVED_SCREEN_VIEWS); mSelectMode = savedInstanceState.getBoolean (SAVED_SELECT_MODE); } updateUI(); return view; } @Override public void onResume(){ super.onResume(); updateUI(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(SAVED_SUBTITLE_VISIBLE, mSubtitleVisible); outState.putBoolean(SAVED_SCREEN_VIEWS, mGridListView); outState.putBoolean(SAVED_SELECT_MODE, mSelectMode); } //Menu options @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_task_list, menu); MenuItem subtitleItem = menu.findItem(R.id.menu_item_show_subtitle); if (mSubtitleVisible) { subtitleItem.setTitle(R.string.hide_subtitle); } else { subtitleItem.setTitle(R.string.show_subtitle); } } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.menu_item_new_task: Task task = new Task(); TaskLab.get(getActivity()).addTask(task); Intent intent = TaskPagerActivity.newIntent(getActivity(), task.getId()); startActivity(intent); return true; case R.id.menu_item_show_subtitle: mSubtitleVisible = !mSubtitleVisible; getActivity().invalidateOptionsMenu(); updateSubtitle(); return true; case R.id.menu_item_delete_list: Toast.makeText(getContext(), "Not ready", Toast.LENGTH_SHORT).show(); return true; case R.id.menu_item_switch_view: mGridListView = !mGridListView; changeListView(); default: return super.onOptionsItemSelected(item); } } public void updateSubtitle(){ TaskLab taskLab = TaskLab.get(getActivity()); int taskSize = taskLab.getTasks().size(); String subtitle = getResources() .getQuantityString(R.plurals.subtitle_plural, taskSize, taskSize); if (!mSubtitleVisible) { subtitle = null; } AppCompatActivity activity = (AppCompatActivity) getActivity(); activity.getSupportActionBar().setSubtitle(subtitle); } public void changeListView() { if (mGridListView){ mTaskRecyclerView.setLayoutManager(new GridLayoutManager (getActivity(), 2)); } else { mTaskRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); } //TODO: calculate the dimension of the grid } private void updateUI() { TaskLab taskLab = TaskLab.get(getActivity()); List<Task> tasks = taskLab.getTasks(); if (mAdapter == null){ mAdapter = new TaskAdapter(tasks); mTaskRecyclerView.setAdapter(mAdapter); } else { //mAdapter.notifyItemChanged(mChangedPosition); mAdapter.setTasks(tasks); mAdapter.notifyDataSetChanged(); } if (tasks.size() == 0){ mEmptyNotifyTextView.setText( getString(R.string.notify_empty_list) ); mEmptyNotifyTextView.setVisibility(View.VISIBLE); } else { mEmptyNotifyTextView.setVisibility(View.INVISIBLE); } changeListView(); updateSubtitle(); } private class TaskHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ private TextView mTitleTextView; private TextView mDateTextView; private CheckBox mSolvedCheckBox; private Task mTask; public TaskHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_task_title_text_view); mDateTextView = (TextView) itemView.findViewById(R.id.list_item_task_date_text_view); mSolvedCheckBox= (CheckBox) itemView.findViewById(R.id.list_item_task_solved_check_box); mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // Set Flag of solved crime mTask.setSolved(isChecked); TaskLab.get(getActivity()) .updateTask(mTask); } }); } public void bindTask(Task task){ mTask = task; mTitleTextView.setText(mTask.getTitle()); mDateTextView.setText(mTask.getDateString()); mSolvedCheckBox.setChecked(mTask.isSolved()); } @Override public void onClick(View view) { mChangedPosition = getAdapterPosition(); if (!mSelectMode) { Intent intent = TaskPagerActivity.newIntent(getActivity(), mTask.getId()); startActivity(intent); } else { Toast.makeText(getContext(), "Item Selected " + mTask.getTitle(), Toast.LENGTH_SHORT).show(); } } @Override public boolean onLongClick(View view) { mSelectMode = !mSelectMode; Toast.makeText(getContext(), "Select mode \n Item Selected " + mTask.getTitle(), Toast.LENGTH_SHORT).show(); return false; } } private class TaskAdapter extends RecyclerView.Adapter<TaskHolder> { private List<Task> mTasks; public TaskAdapter(List<Task> tasks){ this.mTasks = tasks; } @Override public TaskHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View view = layoutInflater .inflate(R.layout.list_item_task, parent, false); return new TaskHolder(view); } @Override public void onBindViewHolder(TaskHolder holder, int position) { Task task = mTasks.get(position); holder.bindTask(task); } @Override public int getItemCount() { return mTasks.size(); } public void setTasks(List<Task> tasks){ mTasks = tasks; } } 

}

    1 answer 1

     @Override public boolean onLongClick(View view) { mSelectMode = !mSelectMode; Toast.makeText(getContext(), "Select mode \n Item Selected " + mTask.getTitle(), Toast.LENGTH_SHORT).show(); return true; } 

    Or if you need in some cases to process onClick instead of onLongClick, then in onLongClick you need to return false only for these cases.