A voir également:
- Android kotlin
- Android recovery - Guide
- Begone android - Accueil - Protection
- Presse papier android - Guide
- À quoi sert google drive sur android - Guide
- Android 15 - Accueil - Android
2 réponses
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
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
}
}

Super merci mais comment fait t’il pour récupérer la position
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
Je peux vous montrer ?
Si tu veux, mais quel ton objectif exactement ?