当出现对话范围时,从选定中选择的RecyClerview将项目制作



我已经用 OnRecyclerItemClicked Listener实现了ta RecyclerViewAdapter

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的构造函数。这是处理活动中的回收道上的按钮的密码:

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

取决于position,我在活动中加载一个片段,该片段显示对话范围以显示加载屏幕,直到获取数据等。但是,在显示对话范围后,不再按下回收瓶中的按下按钮。任何人都知道怎么了?

创建这样的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中填充项目。根据您选择的项目设置isseled属性。因此,即使列表在中间介绍列表。

最新更新