Android kotlin
baptiste
-
BunoCS Messages postés 436 Date d'inscription Statut Modérateur Dernière intervention -
BunoCS Messages postés 436 Date d'inscription Statut Modérateur Dernière intervention -
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.ktpackage 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 } }
