Android kotlin

baptiste -  
BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   -

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

2 réponses

  1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 930
     

    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
    1. Baptiste
       

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

      0
      1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 930 > Baptiste
         

        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
      2. Baptiste > BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention  
         

        Je peux vous montrer ?

        0
      3. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 930 > Baptiste
         

        Si tu veux, mais quel ton objectif exactement ?

        0
  2. baptiste
     

    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
    1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 930
       

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

      0
      1. baptiste > BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention  
         

        j'ai pas compris a quoi sert le smart cast

        0