我已经用 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属性。因此,即使列表在中间介绍列表。