2017-08-22 126 views
3

如何在我的ListView中的每个项目中使用setOnItemClickListnersetOnLongClickListener在android中使用kotlin

我的xml:

<ListView 
    android:id="@+id/tv1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

</ListView> 

这是我的适配器类

inner class mo3d1Adapter : BaseAdapter { 
    override fun getItemId(p0: Int): Long { 
     return p0.toLong() 
    } 

    override fun getCount(): Int { 
     return listOfmo3d.size 
    } 

    var listOfMkabala = ArrayList<MeetingDetails>() 
    var context: Context? = null 

    constructor(context: Context, listOfMkabaln: ArrayList<MeetingDetails>) : super() { 
     this.listOfMkabala = listOfMkabaln 
     this.context = context 
    } 

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { 
     val mo3d = listOfmo3d[p0] 

     var inflatormo3d = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater 
     var myViewmo3d = inflatormo3d.inflate(R.layout.fragment_item, null) 

     lvMo3d.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l -> 
      Toast.makeText(context, " TEST STACK ", Toast.LENGTH_LONG).show() 

     } 


     myViewmo3d.meeting_name.text = mo3d.name1!! 
     myViewmo3d.meeting_date.text = mo3d.date.toString()!! 
     myViewmo3d.attendance_number.text = mo3d.n2.toString()!! 



     return myViewmo3d 


    } 

    override fun getItem(p0: Int): Any { 
     return listOfmo3d[p0] 

    } 


} 
  • 我想每个项目听众在我ListView

当我用这个方法setOnClickListener在适配器不工作,我可以在哪里使用?

+0

https://stackoverflow.com/questions/45783452/setonlongclicklistener-in-kotlin-android –

+0

[kotlin android]中setOnLongClickListener的可能重复(https://stackoverflow.com/questions/45783452/setonlongclicklistener-in-kotlin) -roid) – BakaWaii

+0

ListView使用setOnItemClickListner设置setOnClickListener的实例 –

回答

2

试试这个在您的活动类

lv.setOnItemClickListener { parent, view, position, id -> 


      Toast.makeText(this, "Position Clicked:"+" "+position,Toast.LENGTH_SHORT).show() 
     } 
+0

我可以在哪里使用这个方法? –

+0

如果你需要在适配器中使用它在适配器类 –

+0

检查我更新的答案,并把你的适配器类 –

0

首先我想告诉大家,这是RecyclerView而非ListView。你可以找到很多信息,为什么要这样做。例如,你可以读取它听到:

RecyclerView vs. ListView

关于你的问题如何与RecyclerView做正确的方式。

插入与RecyclerView的依赖关系,它们现在位于Kotlin的支持库中。

实施 “com.android.support:appcompat-v7:25.4.0”

首先改变你的ListView与RecyclerView在XML布局是这样的:

<android.support.v7.widget.RecyclerView 
    android:id="@+id/accountList" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

创建AdapterRecyclerView

class AccountListAdapter(val accountList: AccountList, val itemListener: (Account) -> Unit) : 
    RecyclerView.Adapter<AccountListAdapter.ViewHolder>(){ 

    override fun getItemCount(): Int = accountList.size 

    override fun onBindViewHolder(holder: ViewHolder, position: Int) = 
     holder.bind(accountList[position]) 


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder{ 
     val view = LayoutInflater.from(parent.context).inflate(R.layout.item_account, parent, false) 
     return ViewHolder(view, itemListener) 
    } 

    class ViewHolder(itemView: View, val itemClick: (Account) -> Unit): RecyclerView.ViewHolder(itemView){ 
     fun bind(account : Account){ 
      with(account){ 
       itemView.accountName.text = title 
       itemView.setOnClickListener{ itemClick(this)} 
      } 
     } 
    } 
} 

item_account.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/accountName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

模型(在科特林你可以把它们放在一个文件名,例如AccountModels.kt):

data class AccountList(val accounts: List<Account>){ 

    val size : Int 
     get() = accounts.size 

    operator fun get(position: Int) = accounts[position] 
} 

data class Account(val id : Long, val title : String, val balance : Int, val defCurrency: Int) 

片段/活动连接您的AdapterRecyclerView

override fun onStart() { 
    super.onStart() 
    setupAdapter() 
} 

fun setupAdapter(){ 

    Log.d(TAG, "updating ui..") 
    val account1 = Account(1,"Credit", 1000, 2) 
    val account2 = Account(2, "Debit", 500, 2) 
    val account3 = Account(3, "Cash", 7000, 2) 

    val accounts : List<Account> = listOf(account1, account2, account3) 

    val adapter = AccountListAdapter(AccountList(accounts)){ 
     val title = it.title 
     Log.d(TAG, "$title clicked") 
    } 
    accountList.layoutManager = LinearLayoutManager(activity) 
    accountList.adapter = adapter 
} 

就是这样。一切都应该现在工作。希望能帮助到你。

相关问题