создание приложения, которое добавляет имена в виде списка в kotlin - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать простое приложение, в котором я могу добавлять имена в представление списка, которое я пишу в виде обычного текста, который я сделал, поэтому идея заключается в том, что когда я нажимаю кнопку, имя добавляется в представление списка с номером строки, i сделайте этот код, но я не знаю, как использовать кнопку в списке! , даже когда я запускаю приложение, оно показывает мне белую страницу

    package com.example.mylistviewexample

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Layout
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ListView
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listView = findViewById<ListView>(R.id.listView)
        listView.adapter = myCustomAdapter(this)


    }


    private class myCustomAdapter(context: Context):BaseAdapter() {


        private val names = R.id.nameText

        private val mContext: Context

        init {

            this.mContext = context
        }


            override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {

                val layoutInflater = LayoutInflater.from(mContext)
                val rowMain = layoutInflater.inflate(R.layout.rows,parent,false)

                val countRow = rowMain.findViewById<TextView>(R.id.rowNumber)
                countRow.text = "Row :$position"

                val nameText = rowMain.findViewById<TextView>(R.id.name_textView)
                nameText.text = names.toString()

                return rowMain
            }

            override fun getItem(position: Int): Any {

                return "Test"
            }

            override fun getItemId(position: Int): Long {

                return position.toLong()
            }

            override fun getCount(): Int {

                return count
            }


        }
    }

основная активность

    <?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">


    <ListView

        android:id="@+id/listView"
        android:layout_width="394dp"
        android:layout_height="545dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/nameText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="105dp"
        android:layout_marginTop="49dp"
        android:layout_marginEnd="93dp"
        android:ems="10"
        android:hint="  Add Your Name"
        android:inputType="textPersonName"
        android:textColorHint="#E31313"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/nameText" />
</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/name_textView"
        android:layout_width="239dp"
        android:layout_height="94dp"
        android:fontFamily="sans-serif"
        android:includeFontPadding="true"
        android:text="Name"
        android:textColor="#0B0B0B"
        android:textColorHint="#000000"
        android:textSize="16sp"
        android:textStyle="bold|italic"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.159"
        app:layout_constraintStart_toStartOf="parent"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteY="60dp" />

    <TextView
        android:id="@+id/rowNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"

        android:text="TextView"
        app:layout_constraintTop_toBottomOf="@+id/name_textView"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteX="36dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

0 голосов
/ 09 мая 2020

Я исправил ваш код, чтобы вы могли видеть, что что-то происходит внутри созданного вами списка.

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val listView = findViewById<ListView>(R.id.listView)
    listView.adapter = MyCustomAdapter(this, populateArrayList())
}

private fun populateArrayList() : ArrayList<String>{
    val myArrayList = ArrayList<String>()
    myArrayList.add("Luke")
    myArrayList.add("Anakin")
    myArrayList.add("Obi-Wan")
    myArrayList.add("Jarjar")
    return myArrayList
}

private class MyCustomAdapter(private val context: Context, private val myList: ArrayList<String>):BaseAdapter() {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
        val rowLayout = LayoutInflater.from(context).inflate(R.layout.rows,parent,false)
        val countRow = rowLayout.findViewById<TextView>(R.id.rowNumber)
        val nameText = rowLayout.findViewById<TextView>(R.id.name_textView)
        nameText.text = myList[position]
        countRow.text = "Row :$position"
        return rowLayout
    }

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

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

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

}

Вы создали представление списка, но не добавили в него ничего , и каждый список должен быть заполнен информацией для окон просмотра (каждая имеющаяся у вас строка); и для этого в вашем классе адаптера вам нужно передать ArrayList в качестве параметра для конструктора (private val myList).

Затем вы связываете каждую строку с позицией в списке.

Я считаю, что вы хотите делать каждый раз, когда вы нажимаете кнопку, к вам будет добавляться новый элемент с информацией, которая есть в тексте редактирования, поэтому создайте onClickListener для своей кнопки и при каждом нажатии вы добавляете его в свой массив.

...