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?
Danke für die schnelle Antwort, aber hat nicht geholfen. – MeLine