- Forum-Beiträge: 602
22.11.2021, 20:48:32 via Website
22.11.2021 20:48:32 via Website
Hallo zusammen
Um den Inhalt meiner App zu erstellen verwende ich Fragmente. In den Fragmenten baue ich den Inhalt über Adapter auf. Nun möchte ich aus meinem Adapter heraus ein Dialogfragment aufrufen. Für den Aufruf benötige ich ein Fragmentmanager. Den erhalte ich über Umwegen von der Mainactivity
class TelAdapter(var context: Context) : BaseAdapter(), DialogInterface.OnClickListener{
und
private val ctx = context as AppCompatActivity
Somit kann ich den Dialog mit dem Fragmentmanager aufrufen
dialog.show(ctx.supportFragmentManager, DialogFrag.TAG)
Wenn ich den Dialog verlassen möchte, dann Zeigt mein "horcher" auf die MainActivity auf welcher es kein Dialoginterface hat. Das ganze läuft ins leere. Wenn ich den Context des Adappter verwende habe ich kein Fragmentmanager.
Irgend wie drehe ich mich im Kreis. Oder mache ich da einen falschen Ansatz.
Adapptr:
package ch.robbisoft.klassennotfall
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import android.widget.Toast
import android.content.DialogInterface
import androidx.appcompat.app.AppCompatActivity
class TelAdapter(var context: Context) : BaseAdapter(), DialogInterface.OnClickListener{
private val inflater = LayoutInflater.from(context)
private val ctx = context as AppCompatActivity
public var counter : Int = 0
public var nliste = arrayListOf<Person>()
private lateinit var dialog: DialogFrag
override fun getCount(): Int {
return counter
}
override fun getItem(position: Int): Any {
return nliste[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view : View
if (convertView != null) {
view = convertView
}else{
view = inflater.inflate(R.layout.klass_list, parent, false)
}
val persdat = nliste[position]
val obj_name = view.findViewById<TextView>(R.id.txt_klassname)
val obj_mutter = view.findViewById<TextView>(R.id.txt_klassmutter)
val obj_vater = view.findViewById<TextView>(R.id.txt_klassvater)
val obj_allg = view.findViewById<TextView>(R.id.txt_klassallgemein)
obj_name.text = persdat.pname
obj_mutter.text = persdat.telmutter
obj_vater.text = persdat.telvater
obj_allg.text = persdat.telalg
obj_name.setOnClickListener {
Toast.makeText(ctx, "Das ist der Name " + persdat.pname, Toast.LENGTH_LONG).show()
}
obj_mutter.setOnClickListener {
Toast.makeText(ctx, "Das ist die Mutter", Toast.LENGTH_LONG).show()
}
obj_vater.setOnClickListener {
Toast.makeText(ctx, "Das ist der Vater", Toast.LENGTH_LONG).show()
}
obj_allg.setOnClickListener {
Toast.makeText(ctx, "Das ist das Allgemeine", Toast.LENGTH_LONG).show()
}
obj_name.setOnLongClickListener {
dialog = DialogFrag()
dialog.persname = persdat.pname
dialog.show(ctx.supportFragmentManager, DialogFrag.TAG)
true
}
obj_mutter.setOnLongClickListener {
Toast.makeText(ctx, "langer klick", Toast.LENGTH_LONG).show()
true
}
obj_vater.setOnLongClickListener {
Toast.makeText(ctx, "langer klick", Toast.LENGTH_LONG).show()
true
}
obj_allg.setOnLongClickListener {
Toast.makeText(ctx, "langer klick", Toast.LENGTH_LONG).show()
true
}
return view
}
override fun onClick(dialog : DialogInterface?, was : Int) {
var neu = 1
}
}
Dialogfragment:
package ch.robbisoft.klassennotfall
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import androidx.fragment.app.DialogFragment
class DialogFrag : DialogFragment() {
private lateinit var horcher ialogInterface.OnClickListener
public var persname : String = ""
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is DialogInterface.OnClickListener){
horcher = context
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = AlertDialog.Builder(requireContext())
dialog.setTitle(R.string.dia_titel)
dialog.setMessage(getString(R.string.dia_meldung, persname))
dialog.setCancelable(false)
dialog.setPositiveButton(R.string.dia_ja, horcher)
dialog.setNegativeButton(R.string.dai_nein, horcher)
dialog.setNeutralButton(R.string.dia_neutral, horcher)
return dialog.create()
}
companion object{
val TAG = DialogFrag::class.simpleName
}
}
Gruss Renato
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.