2017-05-08 4 views
0

I ta RecyclerViewAdapter mit OnRecyclerItemClicked Listener umgesetzt haben, auf diese Weise:RecyclerView Artikel machen, ausgewählt aus nicht ausgewählt, wenn DialogFragment erscheint

public class MyRecyclerViewButtonsAdapter extends RecyclerView.Adapter<MyRecyclerViewButtonsAdapter.CustomViewHolder> { 
    private List<String> buttonNames; 
    private OnRecyclerItemClicked onRecyclerItemClicked; 
    private int selectedPosition; 

    public MyRecyclerViewButtonsAdapter(String[] buttonNamesArr, int currentSelectedPosition, OnRecyclerItemClicked listener) { 
     this.buttonNames = new ArrayList<>(); 
     this.selectedPosition = currentSelectedPosition; 

     for (int i = 0; i < buttonNamesArr.length; i++) { 
      buttonNames.add(i,buttonNamesArr[i]); 
     } 

     onRecyclerItemClicked = listener; 
    } 

    @Override 
    public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     @SuppressLint("InflateParams") 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.button_item, null); 
     return new CustomViewHolder(view, onRecyclerItemClicked); 
    } 

    @Override 
    public void onBindViewHolder(CustomViewHolder holder, int position) { 
     holder.button.setText(buttonNames.get(position)); 
     holder.button.setPressed(position == selectedPosition); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != buttonNames ? buttonNames.size() : 0); 
    } 


    public int getSelectedPosition() { 
     return selectedPosition; 
    } 

    public void setSelectedPosition(int selectedPosition) { 
     this.selectedPosition = selectedPosition; 
    } 

    class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     protected Button button; 
     protected OnRecyclerItemClicked itemClickedListener; 

     public CustomViewHolder(View view, OnRecyclerItemClicked itemClickedListener) { 
      super(view); 
      this.button = (Button) view.findViewById(R.id.button_item); 
      this.itemClickedListener = itemClickedListener; 
      this.button.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View view) { 
      itemClickedListener.onRecyclerItemClicked(view, getAdapterPosition()); 
     } 
    } 

    public interface OnRecyclerItemClicked { 
     void onRecyclerItemClicked(View view, int position); 
    } 
} 

I Zustand XML-Datei verwenden, die Taste zu simulieren gedrückt wird, wie folgt:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/shape_main_btn_prs" android:state_focused="true" android:state_pressed="false"/> 
    <item android:drawable="@drawable/shape_main_btn_prs" android:state_focused="true" android:state_pressed="true"/> 
    <item android:drawable="@drawable/shape_main_btn_prs" android:state_focused="false" android:state_pressed="true"/> 
    <item android:drawable="@drawable/shape_main_btn" android:state_focused="false" android:state_pressed="false"/> 
    <item android:drawable="@drawable/shape_main_btn"/> 

</selector> 

Meine Activity implementiert den Klick-Listener und ich gebe es in RecycklerViewAdapter-Konstruktor. Diese ist der Code, die Klicks auf Schaltflächen in der recyclerview im Aktivitäts Griff:

@Override 
    public void onRecyclerItemClicked(View view, int position) { 
     mAdapter.setSelectedPosition(position); 
     lastSelectedButtonPosition = position; //value for savedInstance 
     mAdapter.notifyDataSetChanged(); 
     mRecycler.scrollToPosition(position); 

     loadFragment(position); 
    } 

Abhängig von den position, I ein Fragment in der Aktivität laden, die DialogFragment um zeigt Ladebildschirm angezeigt werden, bis Daten sind geholt und so weiter. Nachdem jedoch DialogFragment angezeigt wurde, wird die gedrückte Schaltfläche in der Recycleransicht nicht mehr gedrückt. Wer hat eine Idee, was kann falsch sein?

Antwort

1

Erstellen Sie eine POJO-Klasse wie diese.

public class RecyclerViewItem{ 
    String buttonName; 
    boolean isSelected; 
    public boolean getSelected(){ 
    return isSelected; 
    } 
public void setSelected(boolean isSelected){ 
    this.isSelected = isSelected; 
} 
public void setName(String buttonName){ 
    this.buttonName = buttonName; 
} 
public String getName(){ 
    return buttonName; 
} 

}

Verwendung dieser Elemente in RecyclerView zu füllen. Legen Sie das Attribut isSelected entsprechend dem ausgewählten Element fest. Damit bleibt das Element ausgewählt, auch wenn die Liste zwischenzeitlich aktualisiert wird.

+0

Danke für die schnelle Antwort, aber hat nicht geholfen. – MeLine

Verwandte Themen