Отображение пользовательского ListView в пользовательском диалоге с помощью (Kotlin) - PullRequest
0 голосов
/ 23 марта 2020

Я хотел бы сделать пользовательский диалог, который показывает список чисел от 1 до 9 в качестве пользовательского ListView. Другими словами, я хочу поместить пользовательский ListView в пользовательский диалог.

Это мой основной макет, который содержит кнопку для отображения диалога при нажатии

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="293dp"
        android:layout_marginEnd="149dp"
        android:text="show"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Это мой макет ListView:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Это мой макет строки

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="48dp"
        android:layout_marginTop="28dp"
        android:text="TextView"
        android:textColor="#050505"
        android:textSize="24sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:background="#B0C9C4C4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

Это мой главный класс активности *

package com.omarahmed.customdialogfragment

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.ListView
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    private lateinit var mAdapter:CustomerAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val myList = ArrayList<RowData>()
        myList.add(RowData(1))
        myList.add(RowData(2))
        myList.add(RowData(3))
        myList.add(RowData(4))
        myList.add(RowData(5))
        myList.add(RowData(6))
        myList.add(RowData(7))
        myList.add(RowData(8))
        myList.add(RowData(9))
        mAdapter = CustomerAdapter(this,myList)

        btnShow.setOnClickListener {
            val builder = AlertDialog.Builder(this)
            val view = LayoutInflater.from(this).inflate(R.layout.list_view_layout,null,false)
            val myListView = view.findViewById<ListView>(R.id.listView)
            myListView.adapter = mAdapter
            builder.setView(view)
            val alertDialog = builder.create()
            alertDialog.show()
        }

    }
}

Это мой класс адаптера

package com.omarahmed.customdialogfragment

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView

class CustomerAdapter(private val context: Context,private val list:ArrayList<RowData>) : BaseAdapter() {
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view = LayoutInflater.from(context).inflate(R.layout.row_layout,parent,false)
        val textViewNum = view.findViewById<TextView>(R.id.textView)
        val rowData = list[position]
        textViewNum.text= rowData.numbers.toString()
        return view
    }

    override fun getItem(position: Int): Any {
        return list[position]
    }

    override fun getItemId(position: Int):Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return list.size
    }
}

Это мой класс данных строки

package com.omarahmed.customdialogfragment

data class RowData( var numbers:Int)

Проблема в том, что диалоговое окно отображается без списка. Просто пустой диалог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...