Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击“回收”查看错误位置_Android_Kotlin_Android Recyclerview - Fatal编程技术网

Android 单击“回收”查看错误位置

Android 单击“回收”查看错误位置,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我有一个包含10个姓名的recyclerView,在此活动中可以搜索姓名。单击一个名称,活动将移动到另一个活动(帮助旨在移动详细信息活动)。这是可能的,因为在适配器中,我有一个函数,可以给出用户单击的位置。但是当在菜单搜索中输入一个单词时,这个函数给出了位置1(名字的真实位置,精确的时刻)。 我可以在adpter中发送函数,例如,名称的id?正确的方法是什么 MainActivity.kt class MainActivity : AppCompatActivity(), PeopleI

我有一个包含10个姓名的
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)
    }