colla
colla

Reputation: 1

RecyclerView: how to add OnClick() after onLongClick()

I have a Recyclerview display list of mp3 files, when I click on any file the music of clicked file is start playing and when I long click on any file I change the action bar to another action bar until here everything is fine, but when I try to click the files again after entering action mode I click the files and music still playing

MyAdapter.java:

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>  {

    private static final String TAG = MainActivity.class.getSimpleName();

    private ArrayList<RecyclerItem> listItems;
    private Context mContext;
    private EditText mEditText;
    public boolean is_in_action_mode = false;
    MainActivity mainActivity;

    private onItemClickListener mListener;
    private  onItemLongClickListener mLongListener;


    public MyAdapter(Context mContext, ArrayList<RecyclerItem> listItems) {
        this.listItems = listItems;
        this.mContext = mContext;
    }

    public interface onItemClickListener{
        void onItemClick(int position);
        void onMenuClick(int position, View view);
    }
    public void setOnItemClickListener(onItemClickListener listener){
        mListener = listener;
    }

    public  interface onItemLongClickListener{
        boolean onItemLongClick(int position);
    }


    public void setOnItemLongClickListener(onItemLongClickListener longClickListener){
        mLongListener = longClickListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,parent,false);
        ViewHolder holder = new ViewHolder(view, mListener, mLongListener);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        final RecyclerItem currentItem = listItems.get(position);
        holder.txtTitel.setText(currentItem.getTitle());

        if (!is_in_action_mode){

            is_in_action_mode = false;

        } else {

            is_in_action_mode = true;

        }
    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public TextView txtTitel;
        public TextView txtOptionDigit;
        LinearLayout linearLayout ;
        CardView cardView;
        FrameLayout frameLayout;
        MainActivity mainActivity;


        public ViewHolder(@NonNull View itemView, onItemClickListener listener, onItemLongClickListener longListener) {
            super(itemView);

            txtTitel = (TextView) itemView.findViewById(R.id.txtTitle);
            txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
            frameLayout = (FrameLayout) itemView.findViewById(R.id.frameLayout);
            frameLayout.setOnClickListener(this);

            txtTitel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null){
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION){ 
                            listener.onItemClick(position);  
                        }                    
                    }
                }
            });

            txtTitel.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    if (longListener != null){
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION){ 
                            longListener.onItemLongClick(position);  
                        }                 
                    }
                    return true;
                }
            });

            txtOptionDigit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null){
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION){ 
                            listener.onMenuClick(position, view); 
                        }                  
                    }
                }
            });

        }

        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        @Override
        public void onClick(View v) {
            //when a user select or unselect a cardview this method will invoked
            mainActivity.prepareSelection(v, getAdapterPosition());
        }
    }

    public void upateAdapter(ArrayList<RecyclerItem> selection_list) {
        for (RecyclerItem recyclerItem : selection_list){
            listItems.remove(recyclerItem);
        }
        notifyDataSetChanged();
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();


    private RecyclerView mRecyclerView; //this variable will contain the recyclerview that I created on layout

    MyAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    ArrayList<RecyclerItem> mListItems = new ArrayList<>();
    private MediaPlayer mMediaPlayer = new MediaPlayer();
    private EditText mEditText;

    ActionMode mActionMode;

    int mCurrentPosition;

    Toolbar mToolbar;

    boolean is_in_action_mode = false; 

    TextView counter_text_view;

    ArrayList<RecyclerItem> selection_list = new ArrayList<>();

    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mToolbar = findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);

        //to hide the textview counter on
        counter_text_view = (TextView) findViewById(R.id.textCounter);
        counter_text_view.setVisibility(View.GONE);

        createDataSet();
        buildRecyclerView();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_activity_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    private void createDataSet() {
        File path = getExternalFilesDir("MyFolder");

        File file[] = path.listFiles();

        for (int i = 0; i < file.length; i++) {
            mListItems.add(new RecyclerItem(file[i].getName()));
        }
    }

    private void buildRecyclerView() {

        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);

        //Set adapter
        mAdapter = new MyAdapter(this, mListItems);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new MyAdapter.onItemClickListener() {
            @Override
            public void onItemClick(int position) {
                playMusic(position);
                mCurrentPosition = position;

            }

            @Override
            public void onMenuClick(int position, View view) {
                menuClicked(position, view);
            }


        });

        mAdapter.setOnItemLongClickListener(new MyAdapter.onItemLongClickListener() {
            @Override
            public boolean onItemLongClick(int position) {
                mAdapter.setOnItemClickListener(null);
                getSupportActionBar().setTitle(null);
                mToolbar.getMenu().clear();
                mToolbar.inflateMenu(R.menu.menu_action_mode);
                counter_text_view.setVisibility(View.VISIBLE);
                is_in_action_mode = true;
                mAdapter.notifyDataSetChanged();
                getSupportActionBar().setDisplayHomeAsUpEnabled(true); //to display a back button on the contextual action bar
                return true;
            }
        });
    }


    private void playMusic(int position) {

        String path = String.valueOf(getExternalFilesDir("MyFolder"));

        try{
            mMediaPlayer.reset();
            mMediaPlayer.setDataSource(path + "/" + mListItems.get(position).getTitle());
            mMediaPlayer.prepare();
            mMediaPlayer.start();
        }catch (IOException e){
            //Log.v(getString(R.string.app_name),e.getMessage() );
        }
    }



    public void prepareSelection(View view, int position){

        //this method will invoked when the user select or unselect cardview
        if (((FrameLayout) view).isSelected()){
            //is_in_action_mode = true;
            selection_list.add(mListItems.get(position));
            view.setBackgroundColor(0XFF6200EE);
            counter = counter + 1;
            updateCounter(counter);
        } else { //if the user didn't select the cardview we have to remove that item from selection list
            selection_list.remove(mListItems.get(position));
            counter = counter - 1;
            updateCounter(counter);
        }

    }

    public void updateCounter(int counter){
        if (counter == 0) {
            counter_text_view.setText("0 item selected");
        } else {
            counter_text_view.setText(counter + " item selected");
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){

        if (item.getItemId() == R.id.item_delete){

            //remove the selected item from the adapter
            MyAdapter myAdapter = (MyAdapter) mAdapter;
            myAdapter.upateAdapter(selection_list);

            clearActionMode();
        }

        //now handle the home or back button
        else if (item.getItemId() == android.R.id.home){
            clearActionMode();
            mAdapter.notifyDataSetChanged();
        }
        return true;
    }

    public void clearActionMode(){
        is_in_action_mode = false;

        //clear the menu in the toolbar
        mToolbar.getMenu().clear();
        mToolbar.inflateMenu(R.menu.menu_activity_main);

        //remove the back button from the toolbar
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

        //hide the text view (counter) from the toolbar
        counter_text_view.setVisibility(View.GONE);
        //update the text in the counter
        counter_text_view.setText("0 item selected");

        counter = 0;
        selection_list.clear();
    }

    @Override
    public void onBackPressed() {

        if (is_in_action_mode){
            clearActionMode();
            mAdapter.notifyDataSetChanged();
        } else {
            super.onBackPressed();

        }
    
    
}

Upvotes: 0

Views: 57

Answers (1)

DrHowdyDoo
DrHowdyDoo

Reputation: 2817

Just put an if condition in your onClick listner like:

if(actionMode == false){

    //Open music file

 }else{

   //Select music file (show some indicator for the selected music file like a tick or something)

 }

Upvotes: 1

Related Questions