2017-05-08 115 views
0

我已经TA RecyclerViewAdapter实现与OnRecyclerItemClicked Listener这样:RecyclerView使项目从选择到不选择时DialogFragment出现

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); 
    } 
} 

我使用状态的XML文件,以模拟按钮被按下如下:

<?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> 

我的Activity实现了点击侦听器,并将其传递给RecycklerViewAdapter的构造函数。 这是处理的点击次数上的按钮在活动中的recyclerview的代码:

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

     loadFragment(position); 
    } 

还要看position,我加载在其示出了DialogFragment为了显示加载屏幕的酶活性的片段,直到数据是取材等。 但是在显示DialogFragment后,recyclerview中的按钮不再被按下。 任何人有一个想法可能是错的?

回答

1

创建一个这样的POJO类。

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; 
} 

}

使用它来填充在RecyclerView项目。根据您选择的项目设置isSelected属性。这样即使列表刷新了,项目也会保持选中状态。

+0

感谢您的快速回答,但没有帮助。 – MeLine