Ich habe eine RecyclerView-Liste. Ich versuche, eine onItemLongClick-Methode in der MainActivity einzurichten, um ein DialogFragment zu starten. Der Dialog fordert den Benutzer auf zu bestätigen, dass er ein Element in der RecyclerView-Liste löschen möchte. Ich möchte die Position des RecyclerView-Elements aus der Adapterdatei erfassen, damit das Fragment das korrekte Element aus einer SQLite-Datenbank löschen kann.Android RecyclerView: Wie lege ich Daten in ein Fragment vom Adapter?
Ich versuche, die RecyclerView Artikelposition in einem Bundle mit SetArguments zu übergeben. Android Studio gibt den folgenden Fehler in der Zeile "bundle.putInt" aus: Falscher 2. Argumenttyp. Gefunden: 'Kontakt' (mein Datenmodell), benötigt 'int'. Was fehlt mir hier?
p.s. Ich habe auch eine "onItemClick" -Methode, die korrekt eine andere Aktivität namens "ActActivity" lädt, die auch unten als Referenz gezeigt wird. Sowohl onItemClick als auch onItemLongClick werden mit einer ClickListener-Schnittstelle in der Adapterdatei eingerichtet. Beide Klickmethoden wurden mit Toast getestet und funktionieren gut.
Von Activity-Datei:
...
@Override
public void onItemLongClick(int position, View view) {
// For API >=14, use getFragmentManager() below.
Bundle bundle = new Bundle();
bundle.putInt("item position", **contactListAdapter.getItem(position)**); // error here.
android.app.FragmentManager fm = getFragmentManager();
fm.setArguments(bundle);
DeleteCardViewFragment delCardViewDialog = new DeleteCardViewFragment();
delCardViewDialog.show(fm,"delcardview dialog");
}
@Override
public void onItemClick(int position, View view) {
ActActivity.start(this, contactListAdapter.getItem(position));
}
Von RecyclerView der Adapter-Datei:
public class ContactListAdapter extends RecyclerView.Adapter<ContactListAdapter.ContactHolder>{
private List<Contact> contactList;
private Context context;
private RecyclerItemClickListener recyclerItemClickListener;
public ContactListAdapter(Context context) {
this.context = context;
this.contactList = new ArrayList<>();
...
**public Contact getItem(int position)** {
return contactList.get(position);
}
Fragment-Datei:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// removeItem() here?
dismiss();
}
});
aber Sie haben bereits 'position' in' onItemLon gKlicken Sie (int-Position, Ansicht anzeigen) 'als erstes Argument, verwenden Sie also –
ersetzen Sie einfach 'contactListAdapter.getItem (Position)' mit 'Position'? – AJW
von wo Sie die Daten in der Liste Fragment oder Aktivität ?? –