Day: November 29, 2020

em kotlin: uma ListView XML array adapter personalizada

ficheiro: MainActivity.kt

package pt.deis.estuda.estudoslistview2

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View

const val TAG = "ListView"

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

    fun onList2View(view: View) {
        val intent = Intent(this,ListView2Activity::class.java)
        startActivity(intent)
    }
}

ficheiro: activity_main.xml

<?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:onClick="onList2View"
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:text="ListView XML array adapter personalizado"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

ficheiro: activity_list2_view.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".ListView2Activity">

    <ListView
        android:id="@+id/segundaListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

ficheiro: arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="dados_str">
        <item>Portugal</item>
        <item>Espanha</item>
        <item>Franca</item>
        <item>Italia</item>
        <item>Alemanha</item>
        <item>Belgica</item>
        <item>Holanda</item>
        <item>Austria</item>
        <item>Luxemburgo</item>
        <item>Suecia</item>
        <item>Dinamarca</item>
        <item>Irlanda</item>
        <item>Croacia</item>
        <item>Eslovenia</item>
        <item>Eslovaquia</item>
        <item>Estonia</item>
        <item>Polonia</item>
        <item>Grecia</item>
        <item>Finlandia</item>
        <item>Chipre</item>
        <item>Malta</item>
        <item>Bulgaria</item>
        <item>Hungria</item>
        <item>Romenia</item>
        <item>Rep. Checa</item>
        <item>Letonia</item>
        <item>Lituania</item>
    </string-array>
</resources>

ficheiro: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pt.deis.estuda.estudoslistview2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Estudoslistview2">
        <activity
            android:name=".ListView2Activity"
            android:label="ListView"
            android:parentActivityName=".MainActivity" />


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

ficheiro: ListView2Activity.kt

package pt.deis.estuda.estudolistview

import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_list2_view.*

class ListView2Activity : AppCompatActivity() {
    var flag = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list2_view)

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.subtitle = "Exemplo 2"

        val paises = resources.getStringArray(R.array.dados_str)
        paises.sort()

        //id do elemento das strings ->,R.id.tv1
        val adapter1 = ArrayAdapter<String>(this,R.layout.listview2_item,R.id.tv1,paises)
        //a segunda caixa de texto -> R.id.tv2
        val adapter2 = ArrayAdapter<String>(this,R.layout.listview2_item,R.id.tv2,paises)
        segundaListView.adapter = adapter1

        segundaListView.setOnItemClickListener() {
            parent, view, pos, id ->
            Log.i(TAG, "Item: $pos $id")
            //adapter1.notifyDataSetChanged() //serve para forçar o actualizar os dados
            segundaListView.adapter = if (flag) adapter1 else adapter2
            flag = !flag
        }
    }
}

ficheiro: listview2_item.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="4dp"
        android:background="#800000">
        <ImageView
            android:id="@+id/ivImg"
            android:src="@android:drawable/ic_dialog_map"
            android:layout_width="32dp"
            android:layout_height="32dp" />
        <TextView
            android:textStyle="bold"
            android:padding="4dp"
            android:textSize="20sp"
            android:text="text1"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="wrap_content"
            android:id="@+id/tv1"
            android:textColor="#000000"
            android:background="#f0d080"/>
        <TextView
            android:padding="4dp"
            android:textSize="20sp"
            android:gravity="right"
            android:text="text2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:id="@+id/tv2"
            android:background="#80d0f0"/>
    </LinearLayout>
</FrameLayout>

ficheiro: build.gralde (Module)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions' // obrigatorio para aceder aos diferentes layouts sem usar o findId
}
...

Tags : , , , , ,

em kotlin: uma ListView XML array adapter

ficheiro: MainActivity.kt

package pt.deis.estuda.estudolistview

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View

const val TAG = "ListView"

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

    //nvoas actividades para
    fun onListView1(view: View) {
        val intent = Intent(this,ListView1Activity::class.java)
        startActivity(intent)
    }
}

ficheiro: activity_main.xml

<?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"
    android:background="#f0f0f0"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:onClick="onListView1"
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:text="ListView XML array adapter"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

ficheiro: activity_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".ListView1Activity">

    <ListView
        android:id="@+id/primeiraListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

ficheiro: arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="dados_str">
        <item>Portugal</item>
        <item>Espanha</item>
        <item>Franca</item>
        <item>Italia</item>
        <item>Alemanha</item>
        <item>Belgica</item>
        <item>Holanda</item>
        <item>Austria</item>
        <item>Luxemburgo</item>
        <item>Suecia</item>
        <item>Dinamarca</item>
        <item>Irlanda</item>
        <item>Croacia</item>
        <item>Eslovenia</item>
        <item>Eslovaquia</item>
        <item>Estonia</item>
        <item>Polonia</item>
        <item>Grecia</item>
        <item>Finlandia</item>
        <item>Chipre</item>
        <item>Malta</item>
        <item>Bulgaria</item>
        <item>Hungria</item>
        <item>Romenia</item>
        <item>Rep. Checa</item>
        <item>Letonia</item>
        <item>Lituania</item>
    </string-array>
</resources>

ficheiro: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pt.deis.estuda.estudolistview">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Estudolistview">

        <activity
            android:name=".ListView1Activity"
            android:label="ListView"
            android:parentActivityName=".MainActivity" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

ficheiro: ListView1Activity.kt

package pt.deis.estuda.estudolistview

import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_list_view.*

class ListView1Activity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list_view)

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.subtitle = "Exemplo XML array list"

        //uma lista não ordenada em arrays.xml
        val paises = resources.getStringArray(R.array.dados_str)
        paises.sort()

        //usar um adapter para mostrar a listview
        //contexto (actividades), layout que só tem uma textview, a fonte dos dados (array das strings)
        val adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,paises)
        primeiraListView.adapter = adapter

        primeiraListView.setOnItemClickListener() {
                parent, view, pos, id ->
            Log.i(TAG, "Item: $pos $id")
        }
    }
}

ficheiro: build.gralde (Module)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions' // obrigatorio para aceder aos diferentes layouts sem usar o findId
}
...

Tags : , , , , ,