Hallo,
habe mir schon viele Lösungen speziell in Stackoverflow angesehen. Leider bekomme ich keine bei mir zum Laufen.
Zu meinem Projekt: In der MainActivity wird das Fragment gestartet. Im Fragment lese ich eine SQLite DB aus und schreibe über einen ViewAdapter die Daten in eine recyclerView.
Per Click kennzeichne ich eine Zeile.
Über einen Buttons der außerhalb der View ist will ich Ändern , Löschen usw. ! Dies soll im Fragment ablaufen, aber ich benötige die Position des Datensatzes. Ich möchte keine Dateiarbeit im Adapter unterbringen sondern nur im Fragment.
Code
public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.MyViewHolder> {
private Context context;
public ArrayList<DataModell_aufgabenliste> dataModell_aufgabenliste;
public ArrayList bereich, aufgabentyp, termin, notiz, aufgabe_erledigt, aufgabenListe_id;
private int lastPosition = -1;
public static int row_index = -1;
public static int i, n, listen_id, rowPos;
static DBHelper myDB;
public ViewAdapter(Context context, ArrayList<DataModell_aufgabenliste> dataModell_aufgabenliste, ArrayList bereich, ArrayList aufgabentyp, ArrayList notiz, ArrayList termin, ArrayList aufgabe_erledigt, ArrayList aufgabenListe_id) {
this.context = this.context;
this.dataModell_aufgabenliste = dataModell_aufgabenliste;
this.bereich = bereich;
this.aufgabentyp = aufgabentyp;
this.notiz = notiz;
this.termin = termin;
this.aufgabe_erledigt = aufgabe_erledigt;
this.aufgabenListe_id = aufgabenListe_id;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View rowlayout = inflater.inflate(R.layout.list_row, parent, false);
MyViewHolder viewHolder = new MyViewHolder(rowlayout);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
holder.bereichs_txt.setText(String.valueOf(bereich.get(position)));
holder.aufgabentyp_txt.setText(String.valueOf(aufgabentyp.get(position)));
holder.notiz_txt.setText(String.valueOf(notiz.get(position)));
holder.termin_txt.setText(String.valueOf(termin.get(position)));
holder.bearbeitet_txt.setText(String.valueOf(aufgabe_erledigt.get(position)));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@SuppressLint("RestrictedApi")
@Override
public void onClick(View v) {
row_index = position;
notifyDataSetChanged();
// Toast.makeText(context, "Zeile gewählt " + position, Toast.LENGTH_SHORT).show();
}
});
// Zeile farblich kennzeichnen
if (row_index == position) {
holder.itemView.setBackgroundColor(Color.parseColor("#fffeee"));
} else {
holder.itemView.setBackgroundColor(Color.parseColor("#ffffff"));
}
// spätestens hier sollte die Position übergeben werden //
//-------------------------------------------------------//
}
@Override
public int getItemCount() {
return notiz.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView bereichs_txt, aufgabentyp_txt, notiz_txt, termin_txt, bearbeitet_txt;
public MyViewHolder(final View itemView) {
super(itemView);
bereichs_txt = itemView.findViewById(R.id.TextView_bereich_liste);
aufgabentyp_txt = itemView.findViewById(R.id.TextView_aufgabentyp_liste);
notiz_txt = itemView.findViewById(R.id.TextView_notiz_liste);
termin_txt = itemView.findViewById(R.id.TextView_termin_liste);
bearbeitet_txt = itemView.findViewById(R.id.TextView_bearbeitet_liste);
}
}
}
Alles anzeigen
Kann mir jemand helfen und eine Lösung vorschlagen, die bei ihm funktioniert ?
in Erwartung Wolfgang