Отключить onLongClick и включить onClick, если выбран один элемент - PullRequest
0 голосов
/ 03 июня 2019

Мое приложение имеет список из нескольких элементов.эти элементы имеют методы onClick и onLongClick.Когда элемент выбран, onLongClick должен изменить фон элемента и отобразить панель инструментов параметров (поделиться, удалить, скопировать и т. Д.), Если не выбран ни один элемент, но если уже выбран элемент (путем проверки спискакоторый содержит все выбранные элементы) метод onLongClick должен быть отключен и включен onClick (который также меняет фон элемента, всегда сохраняя панель инструментов параметров).поэтому, когда не выбрано ни одного элемента = longClick включено, если хотя бы один элемент выбрано = включить onClick для более быстрого выбора.для этого приложения я использую RecycelView

(под выделением я подразумеваю изменение фона элемента и замену панели инструментов)


Адаптер

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

private ArrayList<ModelloDati> data_list;
private ArrayList<ModelloDati> selected_items_list = new ArrayList<>();
private Context context;
private Uri uri;
public ModelloDati passOggetto;
private static final int tlTEXT = 0;
private static final int tlIMAGE = 1;
private static final int tlVIDEO = 2;
private static final int tlDATE = 3;
private int total_items = 0 ;
private Toolbar options_toolbar;
private Toolbar toolbar;




public class ImageViewHolder extends RecyclerView.ViewHolder {
    //ImageView mImage;
    private ImageView imageView;
    private TextView ora_layout_foto;
    private RelativeLayout selezione_layout_foto;


    public ImageViewHolder(View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.immagine);
        ora_layout_foto = itemView.findViewById(R.id.ora_layout_Foto);
        selezione_layout_foto = 
itemView.findViewById(R.id.layout_selezione_foto);
    }
}


public class DataLayoutHolder extends RecyclerView.ViewHolder {
    private TextView data;
    private CardView sfondo;


    public DataLayoutHolder(@NonNull View itemView) {
        super(itemView);
        data = itemView.findViewById(R.id.Data);
        sfondo = itemView.findViewById(R.id.sfondo_data);
    }
}

public class TextViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    private TextView titolo;
    private TextView ora;
    private RelativeLayout selezione_layout_testo;


    public TextViewHolder(View v) {
        super(v);
        titolo = itemView.findViewById(R.id.testo);
        selezione_layout_testo = 
itemView.findViewById(R.id.layout_selezione_testo);
        ora = itemView.findViewById(R.id.ora);

    }
}

public class VideoViewHolder extends RecyclerView.ViewHolder{
    private ImageView videoView;
    private LinearLayout clicca;
    private TextView ora_layout_video;
    private  RelativeLayout selezione_layout_video;

    public VideoViewHolder(View v) {
        super(v);
        videoView = itemView.findViewById(R.id.rec);
        ora_layout_video = itemView.findViewById(R.id.ora_layout_Video);
        selezione_layout_video = 
itemView.findViewById(R.id.layout_selezione_video);
        clicca = itemView.findViewById(R.id.clicca);

    }



}






public myAdapter(ArrayList<ModelloDati> lista, Context context, Toolbar 
toolbar, Toolbar toolbar_selezionato) {
    this.data_list = lista;
    this.context = context;
    this.options_toolbar = toolbar_selezionato;
    this.toolbar = toolbar;

}


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

    if(viewType == tlTEXT) {
        View v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_testo,  
parent, false);
        return new TextViewHolder(v);
    }
    else if (viewType == tlIMAGE) {
        View v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_foto, 
parent, false);
        return new ImageViewHolder(v);
    }
    else if (viewType == tlVIDEO) {
        View v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_video, 
parent, false);
        return new VideoViewHolder(v);
    }
    else if (viewType == tlDATE){
        View v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_data, 
parent, false);
        return  new DataLayoutHolder(v);

    }
    else{return null;}
}

















@Override
 public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder 
 myViewHolder, final int position) {
    final ModelloDati oggetto =  
 data_list.get(myViewHolder.getAdapterPosition());
        switch (myViewHolder.getItemViewType()) {

            case tlTEXT:
                final TextViewHolder textViewHolder = (TextViewHolder) 
                 myViewHolder;
                textViewHolder.titolo.setText(oggetto.getTesto());
                textViewHolder.ora.setText(aggiornaTempo(0));
                if((selected_items_list.size() - 1) < 1){


 textViewHolder.selezione_layout_testo.setOnLongClickListener(new 
 View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            onMioClick(oggetto,position,myViewHolder);
                            return true;}
                    });

                }else if(selected_items_list.size() >= 1){

 textViewHolder.selezione_layout_testo.setOnClickListener(new 
 View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           onMioClick(oggetto,position,myViewHolder);
                       }
                   });
                }

            break;

            case tlIMAGE:
                final ImageViewHolder imageViewHolder = (ImageViewHolder) 
 myViewHolder;

 imageViewHolder.imageView.setImageBitmap(oggetto.getImmagini());
                imageViewHolder.ora_layout_foto.setText(aggiornaTempo(0));
                if(selected_items_list.size() > 1){


imageViewHolder.selezione_layout_foto.setOnLongClickListener(new 
View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {

                            onMioClick(oggetto,position,myViewHolder);
                            return true;
                        }
                    });
                }



            break;


            case tlVIDEO:
                final VideoViewHolder videoViewHolder = (VideoViewHolder) 
 myViewHolder;
                uri = oggetto.getUri();


                videoViewHolder.videoView.requestFocus();
                //videoViewHolder.videoView.setVideoURI(uri);
                //videoViewHolder.videoView.seekTo( 100 );
                Glide
                  .with(context)
                  .load(uri)
                  .into(videoViewHolder.videoView);
                videoViewHolder.ora_layout_video.setText(aggiornaTempo(0));
                videoViewHolder.clicca.setOnClickListener(new 
 View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        videoViewHolder.clicca.setOnClickListener(new 
 View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Context context = v.getContext();
                                Intent intent = new 
 Intent(context,FullscreenVideo.class);
                                intent.putExtra("VIDEO",uri.toString());
                                context.startActivity(intent);
                            }
                        });
                    }
                });

 videoViewHolder.selezione_layout_video.setOnLongClickListener(new 
 View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        onMioClick(oggetto,position,myViewHolder);
                        return true;
                    }
                });
            break;


            case tlDATE:
                String data = aggiornaTempo(1);
                DataLayoutHolder viewHolder2 = (DataLayoutHolder) 
 myViewHolder;
                viewHolder2.data.setText(data);

                break;


            default:
                Log.e("FATAL","Unable to bind data");


        }

    }








@Override
public int getItemViewType(int position){

    switch (data_list.get(position).getTYPE()) {
        case 0: return tlTEXT;
        case 1: return tlIMAGE;
        case 2: return tlVIDEO;
        case 3: return tlDATE;
    }
    return 0;

}


@Override
public int getItemCount() {
    if (data_list == null)
        return 0;
    return data_list.size();
}







 public void delete(ModelloDati list){

       int position = data_list.indexOf(passOggetto);
        data_list.remove(position);
        notifyItemRemoved(position);

}


private  String aggiornaTempo (int tipo) {


    if(tipo == 0){
       Date CURRENT_TIME = new Date();
       Calendar calendar = GregorianCalendar.getInstance();
       calendar.setTime(CURRENT_TIME);
       String tempo = 
 calendar.get(calendar.HOUR_OF_DAY)+":"+calendar.get(calendar.MINUTE)+" ";
       return tempo;
    }if(tipo == 1){
        Date CURRENT_TIME = new Date();
        Calendar calendar = GregorianCalendar.getInstance();
        int mese = calendar.get(calendar.MONTH);
        calendar.setTime(CURRENT_TIME);
        String tempo = ""+calendar.get(calendar.DAY_OF_MONTH)+" 
 "+ConvertiMese(mese);
        return tempo;
    }
    else{return null;}
}

private  String ConvertiMese (int mese){
    if(mese == 1) return "Gennaio";
    if(mese == 2) return "febbraio";
    if(mese == 3) return "marzo";
    if(mese == 4) return "aprile";
    if(mese == 5) return "maggio";
    if(mese == 6) return "giugno";
    if(mese == 7) return "luglio";
    if(mese == 8) return "agosto";
    if(mese == 9) return "settembre";
    if(mese == 10) return "ottobre";
    if(mese == 11) return "novembre";
    if(mese == 12) return "dicembre";
    else return "Erroe";
}

private void onMioClick(ModelloDati oggetto, int position, 
RecyclerView.ViewHolder myViewHolder) {


    if (getItemViewType(position) == tlTEXT) {
        boolean trovato = false;

        TextViewHolder textViewHolder = (TextViewHolder) myViewHolder;

        for (int i = 0; i <= selected_items_list.size() - 1; i++) {
            if (selected_items_list.get(i) == oggetto) {


 textViewHolder.selezione_layout_testo.setBackgroundColor(
 context.getResources()
 .getColor(R.color.transparent));
                selected_items_list.remove(i);
                total_items--;
                trovato = true;
            }
        }

        if (!trovato) {
            selected_items_list.add(oggetto);
            total_items++;
            textViewHolder.selezione_layout_testo.setBackgroundColor(
            context.getResources().getColor(R.color.Colore_selezione));
            toolbar.setVisibility(View.GONE);
            options_toolbar.setVisibility(View.VISIBLE);
        }

        if (total_items <= 0) {
            toolbar.setVisibility(View.VISIBLE);
            options_toolbar.setVisibility(View.GONE);
        }

    }

    if (getItemViewType(position) == tlIMAGE) {
        boolean trovato = false;
        ImageViewHolder imageViewHolder = (ImageViewHolder) myViewHolder;

        for (int i = 0; i <= selected_items_list.size() - 1; i++) {
            if (selected_items_list.get(i) == oggetto) {
                imageViewHolder.selezione_layout_foto.setBackgroundColor(
                context.getResources().getColor(R.color.transparent));
                selected_items_list.remove(i);
                total_items--;
                trovato = true;
            }
        }

        if (!trovato) {
            selected_items_list.add(oggetto);
            total_items++;
            imageViewHolder.selezione_layout_foto.setBackgroundColor(
            context.getResources().getColor(R.color.Colore_selezione));
            toolbar.setVisibility(View.GONE);
            options_toolbar.setVisibility(View.VISIBLE);
        }

        if (total_items <= 0) {
            toolbar.setVisibility(View.VISIBLE);
            options_toolbar.setVisibility(View.GONE);
        }
    }

    if (getItemViewType(position) == tlVIDEO) {
        boolean trovato = false;

        final VideoViewHolder videoViewHolder = (VideoViewHolder) 
       myViewHolder;

        for (int i = 0; i <= selected_items_list.size() - 1; i++) {
            if (selected_items_list.get(i) == oggetto) {


videoViewHolder.selezione_layout_video.setBackgroundColor(
context.getResources().getColor(R.color.transparent));
                selected_items_list.remove(i);
                total_items--;
                trovato = true;
            }
        }

        if (!trovato) {
            selected_items_list.add(oggetto);
            total_items++;
            videoViewHolder.selezione_layout_video.setBackgroundColor(
            context.getResources().getColor(R.color.Colore_selezione));
            toolbar.setVisibility(View.GONE);
            options_toolbar.setVisibility(View.VISIBLE);
        }

        if (total_items <= 0) {
            toolbar.setVisibility(View.VISIBLE);
            options_toolbar.setVisibility(View.GONE);
        }

    }

    if (total_items > 0) {

    }

}



}

Основная схема деятельности

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout    
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
>

<RelativeLayout
    android:id="@+id/relativeLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toTopOf="@+id/recyclerView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/colorPrimary"
        android:elevation="20dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:title="@string/app_name"
        app:titleTextColor="#fff" />

    <android.support.v7.widget.Toolbar
        android:visibility="gone"
        android:id="@+id/toolbar_selezionato"
        android:elevation="20dp"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/colorPrimary">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <ImageButton
                    android:id="@+id/indietro_toolbar_selezionato"
                    android:layout_width="56dp"
                    android:layout_height="56dp"
                    android:src="@drawable/back_button_toolbar"
                    android:backgroundTint="@color/colorPrimary"/>


            </RelativeLayout>
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="end"
                android:layout_marginEnd="55dp">
                <ImageButton
                    android:id="@+id/cancella_toolbar_selezionato"
                    android:layout_width="56dp"
                    android:layout_height="56dp"
                    android:src="@drawable/delete_button_toolbar"
                    android:backgroundTint="@color/colorPrimary"/>

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="end">

                <ImageButton
                    android:id="@+id/condividi_toolbar_selezionato"
                    android:layout_width="56dp"
                    android:layout_height="56dp"
                    android:src="@drawable/share_button_toolbar"
                    android:backgroundTint="@color/colorPrimary" />

            </RelativeLayout>



        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

</RelativeLayout>


<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="#0F0294A5"
    android:descendantFocusability="blocksDescendants"
    app:layout_constraintBottom_toTopOf="@+id/linearLayout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/relativeLayout" />


<LinearLayout
    android:focusable="true"
    android:elevation="8dp"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    app:layout_constraintBottom_toBottomOf="parent"
    android:orientation="horizontal">

    <EditText
        android:layout_gravity="center_vertical"
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="55dp"
        android:background="#0003A9F4"
        android:hint="Scrivi"
        android:padding="10dp" />




    <Button
        android:layout_gravity="center_vertical"
        android:id="@+id/camera"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/camera"
      />

    <Button
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="0.5dp"
        android:id="@+id/video"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/video"
        />

    <Button
        android:layout_gravity="center_vertical"
        android:id="@+id/send"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:background="@mipmap/send" />


</LinearLayout>



 </android.support.constraint.ConstraintLayout>
...