In meiner App habe ich eine Fragment
, die eine Liste von Elementen darstellt.Schaltflächenfunktion in Fragment, das eine Liste darstellt
Dies geschieht mit einem RecyclerViewAdapter. Ich habe eine OnListFragmentInteractionListener
implementiert und daher, wenn ich auf ein Element in der Liste klicke, macht meine App etwas.
Das funktioniert richtig. Ich entschied jedoch, dass ich auch einen Knopf innerhalb dieses Artikels hinzufügen möchte. Wenn ich also auf eine andere Stelle als die Schaltfläche klicke, aber innerhalb der Grenzen des Objekts, wird die Funktionalität wie zuvor fortgesetzt, aber wenn ich auf die Schaltfläche klicke, wird etwas anderes gemacht.
Meine Frage ist, wo ich diese Funktionalität implementieren?
Die XML-Datei, die ein Element in der Liste darstellt, ist nur ein paar Textansichten und eine FloatingActionButton
.
Ich dachte, ich muss dies in meinem Adapter implementieren, aber wo genau? Mein Adapter sieht wie folgt aus:
public class ContractRecyclerViewAdapter extends RecyclerView.Adapter<ContractRecyclerViewAdapter.ViewHolder> {
private final List<Contract> mValues;
private final OnListFragmentInteractionListener mListener;
public ContractRecyclerViewAdapter(List<Contract> items, OnListFragmentInteractionListener listener) {
mValues = items;
mListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_contract_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mSell.setText(mValues.get(position).getSell());
if (holder.mDescription != null) {
holder.mDescription.setText(mValues.get(position).getDescription());
}
// TODO: Get the price from parameters?
holder.mPrice.setText(((Double) new Random().nextDouble()).toString());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onListFragmentInteraction(holder.mItem);
}
}
});
holder.mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
@Override
public int getItemCount() {
return mValues.size();
}
public void addContract(Contract contract) {
mValues.add(contract);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mSell;
public final TextView mDescription;
public final TextView mPrice;
public final FloatingActionButton mBtn;
public Contract mItem;
public ViewHolder(View view) {
super(view);
mView = view;
mSell = (TextView) view.findViewById(R.id.company_text);
mDescription = (TextView) view.findViewById(R.id.contract_description);
mPrice = (TextView) view.findViewById(R.id.price_text);
mBtn = (FloatingActionButton) view.findViewById(R.id.buy_button_from_list);
}
@Override
public String toString() {
return super.toString() + " '" + mSell.getText() + ", " +
mDescription.getText() + "'";
}
}
}
Das Problem, das ist da, wo ich die onClickListener
für meine FloatingActionButton
implementieren werde ich Zugriff auf meine SharedPreferences haben müssen, so dass ich denke, ich werde es in einer Activity
Klasse implementieren müssen (oder Fragment
Klasse). Ist das wahr? Wenn ich diesen Weg gehe, dann muss ich es in der Fragment
implementieren, deren Inhalt diese Ansicht ist, aber wie weiß ich dann die Position des ausgewählten Elements?
Danke.