Android 单击“回收”查看错误位置
我有一个包含10个姓名的Android 单击“回收”查看错误位置,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我有一个包含10个姓名的recyclerView,在此活动中可以搜索姓名。单击一个名称,活动将移动到另一个活动(帮助旨在移动详细信息活动)。这是可能的,因为在适配器中,我有一个函数,可以给出用户单击的位置。但是当在菜单搜索中输入一个单词时,这个函数给出了位置1(名字的真实位置,精确的时刻)。 我可以在adpter中发送函数,例如,名称的id?正确的方法是什么 MainActivity.kt class MainActivity : AppCompatActivity(), PeopleI
recyclerView
,在此活动中可以搜索姓名。单击一个名称,活动
将移动到另一个活动(帮助旨在移动详细信息活动
)。这是可能的,因为在适配器中,我有一个函数,可以给出用户单击的位置。但是当在菜单搜索中输入一个单词时,这个函数给出了位置1(名字的真实位置,精确的时刻)。
我可以在adpter中发送函数,例如,名称的id?正确的方法是什么
MainActivity.kt
class MainActivity : AppCompatActivity(), PeopleInStarWarsAdapter.OnNoteListener {
private lateinit var mainViewModel: MainViewModel
private var listDataPeople = ArrayList<DataPeople>()
private lateinit var dataPeopleAdapter: PeopleInStarWarsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mainViewModel = ViewModelProvider
.AndroidViewModelFactory
.getInstance(application)
.create(MainViewModel::class.java)
//iniciar ViewModel
mainViewModel.init(this)
mainViewModel.getList().observe(this, Observer{ it ->
if(it != null){
listDataPeople = it
dataPeopleAdapter.submitList(listDataPeople)
}
else{
Toast.makeText(this, "Something is wrong!", Toast.LENGTH_SHORT).show()
}
})
initRecyclerView(listDataPeople)
}
private fun initRecyclerView(listDataPeople : ArrayList<DataPeople>) {
recycler_view.layoutManager = LinearLayoutManager(this)
dataPeopleAdapter = PeopleInStarWarsAdapter(listDataPeople, this)
recycler_view.adapter = dataPeopleAdapter
}
override fun onNoteClick(position: Int){
val intent = Intent(this, DetailsActivity::class.java)
intent.putExtra(BuildConfig.POSITION, position)
startActivity(intent)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
val manager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchItem = menu?.findItem(R.id.search)
val searchView = searchItem?.actionView as SearchView
searchView.setSearchableInfo(manager.getSearchableInfo(componentName))
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String): Boolean {
searchView.clearFocus()
searchView.setQuery("", false)
searchItem.collapseActionView()
Log.v("Information", "Looking for $query")
mainViewModel.checkMatch(query, this@MainActivity)
return true
}
override fun onQueryTextChange(newText: String): Boolean {
Log.v("Information", "$newText")
return false
}
})
return true
}
}
class MainActivity:AppCompatActivity(),PeopleInStarWarsAdapter.OnNoteListener{
私有lateinit var mainViewModel:mainViewModel
私有变量listDataPeople=ArrayList()
私有lateinit var DataPeoConceCapter:PeopleInStarWarsAdapter
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mainViewModel=ViewModelProvider
.AndroidViewModelFactory
.getInstance(应用程序)
.create(MainViewModel::class.java)
//独立视图模型
mainViewModel.init(此)
mainViewModel.getList().observe(这个,观察者{it->
如果(it!=null){
listDataPeople=it
DataPeoConceapter.submitList(listDataPeople)
}
否则{
Toast.makeText(这是“出了问题!”,Toast.LENGTH\u SHORT.show()
}
})
initRecyclerView(listDataPeople)
}
private fun initRecyclerView(listDataPeople:ArrayList){
回收器\u view.layoutManager=LinearLayoutManager(此)
DataPeoConceapter=PeopleInStarWarsAdapter(listDataPeople,this)
回收器_view.adapter=DataPeoCapter
}
重写注释单击(位置:Int){
val intent=intent(这是DetailsActivity::class.java)
intent.putExtra(BuildConfig.POSITION,POSITION)
星触觉(意图)
}
重写创建选项菜单(菜单:菜单):布尔值{
菜单充气器。充气(右菜单。主菜单,菜单)
val manager=getSystemService(Context.SEARCH\u服务)作为SearchManager
val searchItem=菜单?.findItem(R.id.search)
val searchView=searchItem?.actionView作为searchView
searchView.setSearchableInfo(manager.getSearchableInfo(组件名称))
searchView.setOnQueryTextListener(对象:searchView.OnQueryTextListener{
重写onQueryTextSubmit(查询:字符串):布尔值{
searchView.clearFocus()
searchView.setQuery(“,false)
searchItem.collapseActionView()
Log.v(“信息”,“寻找$query”)
mainViewModel.checkMatch(查询,this@MainActivity)
返回真值
}
重写onQueryTextChange(newText:String):布尔值{
Log.v(“信息”,“新文本”)
返回错误
}
})
返回真值
}
}
PeopleInStarWarsAdapter.kt
class PeopleInStarWarsAdapter(listDataPeople: ArrayList<DataPeople>, onNoteListener: OnNoteListener) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
var listDataPeople = ArrayList<DataPeople>()
private var mOnNoteListener : OnNoteListener
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.layout_list_item, parent,
false)
)
}
override fun getItemCount(): Int {
return listDataPeople.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolder -> {
holder.ViewHolder(listDataPeople[position], mOnNoteListener)
}
}
}
fun submitList(dataPeopleList: ArrayList<DataPeople>) {
this.listDataPeople = dataPeopleList
notifyDataSetChanged()
}
class ViewHolder constructor(itemView: View): RecyclerView.ViewHolder(itemView), View.OnClickListener {
private val textViewName : TextView = itemView.textView_name
var onNoteListener: OnNoteListener? = null
fun ViewHolder(dataPeople: DataPeople, onNoteListener: OnNoteListener) {
val name = dataPeople.name
this.textViewName.text = name
this.onNoteListener = onNoteListener
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {
onNoteListener?.onNoteClick(adapterPosition)
}
}
interface OnNoteListener {
fun onNoteClick(position: Int)
}
init {
this.listDataPeople = listDataPeople
mOnNoteListener = onNoteListener
}
}
class PeopleInStarWarsAdapter(listDataPeople:ArrayList,onNoteListener:onNoteListener):RecyclerView.Adapter(){
var listDataPeople=ArrayList()
私有变量mOnNoteListener:OnNoteListener
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):RecyclerView.ViewHolder{
返回视窗座(
LayoutFlater.from(parent.context).充气(
R.layout.layout\u列表\u项,父项,
(错误)
)
}
重写getItemCount():Int{
返回listDataPeople.size
}
覆盖onBindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
何时(持有人){
是ViewHolder->{
holder.ViewHolder(listDataPeople[position],mOnNoteListener)
}
}
}
趣味提交列表(dataPeopleList:ArrayList){
this.listDataPeople=dataPeopleList
notifyDataSetChanged()
}
类ViewHolder构造函数(itemView:View):RecyclerView.ViewHolder(itemView),View.OnClickListener{
private val textViewName:TextView=itemView.TextView\u name
变量onNoteListener:onNoteListener?=null
有趣的视图持有者(dataPeople:dataPeople,onNoteListener:onNoteListener){
val name=dataPeople.name
this.textViewName.text=名称
this.onNoteListener=onNoteListener
itemView.setOnClickListener(此)
}
覆盖有趣的onClick(v:视图?){
onNoteListener?.onNoteClick(适配器位置)
}
}
接口OnNoteListener{
有趣的点击(位置:Int)
}
初始化{
this.listDataPeople=listDataPeople
mOnNoteListener=onNoteListener
}
}
您应该将位置
发送到视图持有者
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolder -> {
holder.ViewHolder(listDataPeople[position], mOnNoteListener,position)
}
}
}
然后将该值传递到onNoteClick()
fun ViewHolder(dataPeople: DataPeople, onNoteListener: OnNoteListener,position: Int) {
val name = dataPeople.name
this.textViewName.text = name
this.onNoteListener = onNoteListener
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {
onNoteListener?.onNoteClick(position)
}