Android kotlin

Fermé
baptiste - 31 août 2022 à 02:03
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 - 1 sept. 2022 à 09:25

Bonjour,

je commence avec android studio sur le language kotlin et il y'a un bout de code que je ne comprend pas si qulqu'un pourrait m'expliquer cela en detail il sert a recuperer la position d'un post qui marche avec un adapter merci.


Windows / Chrome 105.0.0.0

A voir également:

2 réponses

BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
31 août 2022 à 08:40

Hello,

Le mot-clé as te permet d'effectuer un smart cast. En Java, on aurait écrit ceci

AdapterView.ContextMenuInfo info = (AdapterView.ContextMenuInfo) item.menuInfo

0

Super merci mais comment fait t’il pour récupérer la position 

0
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909 > Baptiste
31 août 2022 à 14:25

La position est un champ de l'objet ContextMenuInfo. Le code ne montre pas comment est créé ce menu, il faut regarder du côté de l'Adapter

0
Baptiste > BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024
31 août 2022 à 14:31

Je peux vous montrer ?

0
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909 > Baptiste
31 août 2022 à 14:51

Si tu veux, mais quel ton objectif exactement ?

0

j'aimerai comprendre comment je rcupere la position d'un element avec ca

homeActivity.kt :

package com.example.firstapp

import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.ContextMenu
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.*

class HomeActivity : AppCompatActivity() {
    var postsArray = ArrayList<Post>()
    lateinit var listPosts: ListView
    lateinit var adapter : PostsAdapter

        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home)
        val email = intent.getStringExtra("email")
//venir chercher le id du container listView dans activity_home
        listPosts = findViewById(R.id.listPost)
        postsArray = arrayListOf(
            Post("post 1","une description qui va etre afficher ici au lieu de ce texte qui ne veut rien dire",R.drawable.ic_launcher),
            Post("post 2","une description qui va etre afficher ici au lieu de ce texte qui ne veut rien dire",R.drawable.ic_launcher),
            Post("post 3","une description qui va etre afficher ici au lieu de ce texte qui ne veut rien dire",R.drawable.ic_launcher),
            Post("post 4","une description qui va etre afficher ici au lieu de ce texte qui ne veut rien dire",R.drawable.ic_launcher),
            Post("post 5","une description qui va etre afficher ici au lieu de ce texte qui ne veut rien dire",R.drawable.ic_launcher)
        )

        adapter = PostsAdapter(this, R.layout.item_post,postsArray)
        listPosts.adapter = adapter

        listPosts.setOnItemClickListener { adapterView, view, position, id ->
            val clickedPost = postsArray[position]
            val intentToDetailActivity = Intent(this,PostDetailsActivity::class.java)
            intentToDetailActivity.putExtra("post",clickedPost.titre)
            startActivity(intentToDetailActivity)
        }
// si on reste appuyer sur une un itemPost
        registerForContextMenu(listPosts)
    }
//menu en haut a droite
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.home_menu,menu)
        return super.onCreateOptionsMenu(menu)
    }
//item en haut a droite
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if(item.itemId == R.id.itemAdd){
            Toast.makeText(this, "add new item", Toast.LENGTH_SHORT).show()
        }else if (item.itemId == R.id.itemConfig){
            Toast.makeText(this, "settings", Toast.LENGTH_SHORT).show()
        }else if (item.itemId == R.id.itemLogout){
            finish()

        }
        return super.onOptionsItemSelected(item)
    }
    //creer un menu quelqu'on que
    override fun onCreateContextMenu(
        menu: ContextMenu?,
        v: View?,
        menuInfo: ContextMenu.ContextMenuInfo?
    ) {

        menuInflater.inflate(R.menu.list_context_menu,menu)
        super.onCreateContextMenu(menu, v, menuInfo)
    }


//item qui apparait quand on reste appuyer
    override fun onContextItemSelected(item: MenuItem): Boolean {
    val info : AdapterView.AdapterContextMenuInfo = item.menuInfo as AdapterView.AdapterContextMenuInfo
    val position : Int = info.position
        if(item.itemId == R.id.itemShow) {
            Intent(this,PostDetailsActivity::class.java).also {
                it.putExtra("titre",postsArray[position].titre)
                startActivity(it)


            }
        }else if(item.itemId == R.id.itemDelete){
            postsArray.removeAt(position)
            adapter.notifyDataSetChanged()
        }
        return super.onContextItemSelected(item)
    }
PostsAdapter.kt
package com.example.firstapp

import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView

class PostsAdapter(/*ou on veut afficher le xml*/ var mContext: Context,/* le xml qu'on veut afficher*/  var resource : Int,/* la liste info qu'on va afficher*/  var values :ArrayList<Post>):
    ArrayAdapter<Post>(mContext,resource,values){

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
//position d'un element ex: titre ,description,image voir post
        val post = values[position]
        val itemView = LayoutInflater.from(mContext).inflate(resource,parent,false)
        val tvTitre = itemView.findViewById<TextView>(R.id.tvTitre)
        val tvDescription = itemView.findViewById<TextView>(R.id.tvDescription)
        val imagePost = itemView.findViewById<ImageView>(R.id.imagePost)
        tvTitre.text = post.titre
        tvDescription.text = post.description
        imagePost.setImageResource(post.image)
        return itemView
    }
}
0
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
31 août 2022 à 16:30

C'est dans AdapterView.AdapterContextMenuInfo qu'est fait le traitement. Mais, très certainement, c'est juste la position dans le tableau

0
baptiste > BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024
31 août 2022 à 19:48

j'ai pas compris a quoi sert le smart cast

0
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909 > baptiste
1 sept. 2022 à 09:25
0