Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Java 选择跟踪器实现_Java_Android_Kotlin_Android Recyclerview - Fatal编程技术网

Java 选择跟踪器实现

Java 选择跟踪器实现,java,android,kotlin,android-recyclerview,Java,Android,Kotlin,Android Recyclerview,当我尝试在recycler视图中使用selection tracker时,出现了错误,但它没有显示SelectionTracker.Builder()函数中出现的错误类型 我在android文档中尝试了一次之后,发现了一个教程,我在这两个教程中都遇到了相同的错误 Logcat错误: Caused by: java.lang.IllegalArgumentException at android.support.v4.util.Preconditions.checkArgume

当我尝试在recycler视图中使用selection tracker时,出现了错误,但它没有显示SelectionTracker.Builder()函数中出现的错误类型

我在android文档中尝试了一次之后,发现了一个教程,我在这两个教程中都遇到了相同的错误

Logcat错误:

  Caused by: java.lang.IllegalArgumentException
        at android.support.v4.util.Preconditions.checkArgument(Preconditions.java:38)
        at androidx.recyclerview.selection.SelectionTracker$Builder.<init>(SelectionTracker.java:508)
        at development.ugly.recviewapp.MainActivity.onCreate(MainActivity.kt:23)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

将适配器分配给RecyclerView后,需要分配跟踪器生成器

将适配器分配给RecyclerView后,需要分配跟踪器生成器

import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.widget.LinearLayout
import androidx.recyclerview.selection.SelectionPredicates
import androidx.recyclerview.selection.SelectionTracker
import androidx.recyclerview.selection.StableIdKeyProvider
import androidx.recyclerview.selection.StorageStrategy
import kotlinx.android.synthetic.main.activity_main.*

MainActivity : AppCompatActivity() {

private var tracker: SelectionTracker<Long>? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)



    tracker = SelectionTracker.Builder<Long>("selection-1",
        my_rv,
        StableIdKeyProvider(my_rv),
        MyLookup(my_rv),
        StorageStrategy.createLongStorage()).
        withSelectionPredicate(
            SelectionPredicates.createSelectAnything()).
        build()

    if(savedInstanceState != null)
        tracker?.onRestoreInstanceState(savedInstanceState)


    val myList = listOf(
        Person("Alice", "555-0111"),
        Person("Bob", "555-0119"),
        Person("Carol", "555-0141"),
        Person("Dan", "555-0155"),
        Person("Eric", "555-0180"),
        Person("Craig", "555-0145")
    )

    my_rv.layoutManager = LinearLayoutManager(this)
    my_rv.setHasFixedSize(true)

    var adapter =  MyAdapter(myList, this)

    my_rv.adapter = adapter

    adapter.tracker = tracker
}
}
package development.ugly.recviewapp

import android.support.v7.widget.RecyclerView
import android.view.View
import android.widget.TextView
import androidx.recyclerview.selection.ItemDetailsLookup
import kotlinx.android.synthetic.main.list_item.view.*

class Holder (view : View): RecyclerView.ViewHolder(view) {

val name: TextView = view.list_item_name
val phone: TextView = view.list_item_phone


fun getItemDetails(): ItemDetailsLookup.ItemDetails<Long> = object : ItemDetailsLookup.ItemDetails<Long>() {
    override fun getSelectionKey(): Long? = itemId

    override fun getPosition(): Int = adapterPosition
    }
}
package development.ugly.recviewapp

import android.support.v7.widget.RecyclerView
import android.view.MotionEvent
import androidx.recyclerview.selection.ItemDetailsLookup

class MyLookup(private  val rv: RecyclerView): ItemDetailsLookup<Long>() {

override fun getItemDetails(p0: MotionEvent): ItemDetails<Long>? {

    val view =  rv.findChildViewUnder(p0.x, p0.y)

    if(view != null) {
        return (rv.getChildViewHolder(view) as Holder)
            .getItemDetails()
    }
    return null
}
}
package development.ugly.recviewapp

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
vimport android.view.ViewGroup
import android.widget.LinearLayout
import androidx.recyclerview.selection.SelectionTracker

class MyAdapter(private val list: List<Person>, private val context: Context) : RecyclerView.Adapter<Holder>() {

init {setHasStableIds(true)}

var tracker: SelectionTracker<Long>? = null

override fun getItemId(position: Int): Long = position.toLong()


override fun getItemCount(): Int = list.size


override fun onCreateViewHolder(p0: ViewGroup, p1: Int): Holder = Holder(LayoutInflater.from(context).inflate(R.layout.list_item, p0 ,false))


override fun onBindViewHolder(p0: Holder, p1: Int) {
    p0.name.text = list[p1].name
    p0.phone.text = list[p1].phone
    val parent = p0.name.parent as LinearLayout
}
}
package development.ugly.recviewapp

data class Person (val name: String, val phone: String)