Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 Kotlin RecycleView无法正常工作_Android_Android Recyclerview_Kotlin - Fatal编程技术网

Android Kotlin RecycleView无法正常工作

Android Kotlin RecycleView无法正常工作,android,android-recyclerview,kotlin,Android,Android Recyclerview,Kotlin,我想创建一个小的应用程序,一旦用户点击浮动按钮动作添加元素。它将自动添加 到回收视图的顶部 我已经为此创建了一个主要活动,其中包含回收者的片段和添加flotten 用户单击此按钮后,将显示一个片段对话框以插入元素。一旦用户确认我想将新元素添加到回收视图的顶部 为此,我使用了一个包含该项的全局数组 我还没有实现这个逻辑。但是,当我单击所显示对话框的确认按钮时,我感到惊讶的是,元素正确地添加到了全局数组中,然而,循环视图本身没有对其执行任何操作,而是复制了最新的元素 我使用了模型视图演示器,下面是我

我想创建一个小的应用程序,一旦用户点击浮动按钮动作添加元素。它将自动添加 到回收视图的顶部

我已经为此创建了一个主要活动,其中包含回收者的片段和添加flotten

用户单击此按钮后,将显示一个片段对话框以插入元素。一旦用户确认我想将新元素添加到回收视图的顶部

为此,我使用了一个包含该项的全局数组

我还没有实现这个逻辑。但是,当我单击所显示对话框的确认按钮时,我感到惊讶的是,元素正确地添加到了全局数组中,然而,循环视图本身没有对其执行任何操作,而是复制了最新的元素

我使用了模型视图演示器,下面是我的diff类

1.主要活动

   class MainActivity : AppCompatActivity() {
                override fun onCreate(savedInstanceState: Bundle?) {
                    super.onCreate(savedInstanceState)
                    setContentView(R.layout.activity_main)
                    addFragment(InterFragment(), R.id.container)
                    fab.setOnClickListener { view ->
                        val dialog = IntervAddFragment()
                        val ft = supportFragmentManager.beginTransaction()
                        dialog.show(ft, ContentValues.TAG)
                    }
                }
            }
2.ADDFragmet

class IntervAddFragment : DialogFragment(), AddContract.View
{
   val presenter: AddPresenter by lazy { AddPresenter(this) }
    var dat=""
    var plom=""
    var typ=""

    override fun onCreate(savedInstanceState: Bundle?) { ....}

    override fun onStart() {.... }
    override fun onCreateView(inflater: LayoutInflater?, parent: ViewGroup?, state: Bundle?): View? {...}
    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {....}
    fun  on_confirmClick()
    {
        presenter.on_confirmClick(dat,plom,typ)
        Log.e("errrr",presenter.getList().toString())
        dismiss()
    }

    fun fillSpinerPlom(view : View?) {....    }
    fun fillSpinerType(view : View?) {....    }

    private fun updateDateInView(datep:String) {....}
}
3.干涉

 InterFragment: Fragment(), InterContract.View {

      var views: View? = null
         var List_inter_adapter: InterListAdapter? = null
        private var recyclerView: RecyclerView? = null
        val presenter: InterventionPresenter by lazy { InterventionPresenter(this) }

        override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {.... }

        interface ClickListener {
            fun onClick(view: View, position: Int)
            fun onLongClick(view: View?, position: Int)
        }

        internal class RecyclerTouchListener(context: Context, recyclerView: RecyclerView, private val clickListener: ClickListener?) : RecyclerView.OnItemTouchListener {..... }

            override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {.....}
        override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            recyclerView = views!!.findViewById<View>(R.id.interv_item_listview) as RecyclerView
            List_inter_adapter = InterListAdapter(activity, presenter.getList(true))
            recyclerView!!.adapter = List_inter_adapter
            recyclerView!!.layoutManager = LinearLayoutManager(activity)

       }
    }
InterFragment:Fragment(),InterContract.View{
变量视图:视图?=null
var List_inter_适配器:InterListAdapter?=null
私有变量recyclerView:recyclerView?=null
val presenter:InterventionPresenter by lazy{InterventionPresenter(this)}
覆盖创建视图(充气机:布局充气机?,容器:视图组?,
savedInstanceState:捆绑?:视图?{…}
界面ClickListener{
趣味onClick(视图:视图,位置:Int)
趣味在线长按(视图:视图?,位置:Int)
}
内部类RecyclerTouchListener(上下文:context,recyclerView:recyclerView,私有val clickListener:clickListener?):recyclerView.OnItemTouchListener{….}
重写InterceptTouchEvent(rv:RecyclerView,e:MotionEvent):布尔值{….}
覆盖已创建的视图(视图:view?,savedInstanceState:Bundle?){
super.onViewCreated(视图,savedInstanceState)
recyclerView=views!!.findViewById(R.id.interv\u item\u listview)作为recyclerView
List_inter_adapter=interlistapter(活动,presenter.getList(true))
recyclerView!!.adapter=列表\u内部\u适配器
recyclerView!!.layoutManager=LinearLayoutManager(活动)
}
}
4.相互代表

class InterventionPresenter(val view: InterContract.View)
{
    fun getList(firstTime:Boolean): LinkedList<InterItem> {
       if(firstTime)
           return populateList().list
        else
           return items
    }

    fun populateList(): ListInter
    {
        val item1 = InterItem(1, DateT(2018, Calendar.FEBRUARY, 6).date, plomb.get(0), types.get(0))
        val  item2 = InterItem(2, DateT(2018, Calendar.MARCH, 8).date, plomb.get(1), types.get(1))
        val item3= InterItem(3, DateT(2018, Calendar.MAY, 10).date, plomb.get(2), types.get(2))
        val lstint = ListInter()
        lstint.list= LinkedList(listOf(item1, item2, item3))
        items=lstint.list
        return lstint
    }


    companion object {

        val plomb= LinkedList<String>(listOf("Dina", "Lili", "Wiseem"))
        val types= LinkedList<String>(listOf("type1","type2","type3"))
        lateinit var items: LinkedList<InterItem>
    }

}
class AddPresenter(val view: AddContract.View)
{
    fun on_confirmClick(date:String,plom:String,type:String)
    {
        val item= InterItem(items.size+1,date,plom,type)
            items.push(item)

    }
    fun getList(): LinkedList<InterItem> {
        return items
    }

    fun getplom(): LinkedList<String>
    { return plomb
    }
    fun getType(): LinkedList<String>
    { return types
    }
}
class InterventionPresenter(val视图:InterContract.view)
{
趣味getList(首次:布尔):LinkedList{
如果(第一次)
返回populateList().list
其他的
退货项目
}
趣味流行列表():ListInter
{
val item1=InterItem(1,DateT(2018年,日历2月6日).date,plomb.get(0),types.get(0))
val item2=项目间(2,DateT(2018年3月8日日历)。日期,plomb.get(1),类型。get(1))
val item3=项目间(3,DateT(2018年5月10日日历)。日期,plomb.get(2),类型。get(2))
val lstint=listiner()
list=LinkedList(listOf(item1、item2、item3))
items=lsint.list
返回lstint
}
伴星{
val plomb=LinkedList(列表(“迪娜”、“莉莉”、“怀塞姆”))
val types=LinkedList(列表(“类型1”、“类型2”、“类型3”))
lateinit变量项:LinkedList
}
}
5.添加演示者

class AddPresenter(val view: AddContract.View)
{
    fun on_confirmClick(date:String,plom:String,type:String)
    {
        val item= InterItem(items.size+1,date,plom,type)
            items.push(item)

    }
    fun getList(): LinkedList<InterItem> {
        return items
    }

    fun getplom(): LinkedList<String>
    { return plomb
    }
    fun getType(): LinkedList<String>
    { return types
    }
}
类AddPresenter(val视图:AddContract.view) { 确认点击的乐趣(日期:String,plom:String,类型:String) { val项目=项目间(项目大小+1、日期、plom、类型) 项目。推送(项目) } fun getList():LinkedList{ 退货项目 } fun getplom():LinkedList {返回扑通一声 } fun getType():LinkedList {返回类型 } } 6.中间适配器

class InterListAdapter(private val context: Context, linkedList: LinkedList<InterItem>) : RecyclerView.Adapter<InterListAdapter.ViewHolder>()
{
    internal var  linkedList = LinkedList<InterItem>()
    private val inflater: LayoutInflater
    //private lateinit var listener: OnTaskSelected
    init {... }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {... }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.numero?.text=(linkedList[position].numero).toString()
        holder.date?.text=linkedList[position].date
        holder.plom?.text=linkedList[position].plom
        holder.type?.text=linkedList[position].type
    }
    override fun getItemCount(): Int {
        return linkedList.size

    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        var numero: TextView?=null
        var date: TextView?=null
        var plom: TextView?=null
        var type: TextView?=null
        var btn_delete: Button?=null
        var btn_update: Button?=null
        init {
            numero = itemView.findViewById(R.id.numero)
            date = itemView.findViewById(R.id.date)
            plom = itemView.findViewById(R.id.plom)
            type = itemView.findViewById(R.id.type)
            btn_delete = itemView.findViewById(R.id.btn_supprimer)
            btn_update = itemView.findViewById(R.id.btn_modifier)
        }
    }

}
class InterListAdapter(私有val上下文:context,linkedList:linkedList):RecyclerView.Adapter()
{
内部变量linkedList=linkedList()
私人val充气机:充气机
//私有lateinit变量侦听器:OnTaskSelected
init{…}
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{…}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
holder.numero?.text=(linkedList[position].numero.toString()
holder.date?.text=linkedList[position]。日期
holder.plom?.text=linkedList[position].plom
holder.type?.text=linkedList[position]。类型
}
重写getItemCount():Int{
返回linkedList.size
}
内部类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
变量编号:TextView?=null
变量日期:TextView?=null
变量plom:TextView?=null
变量类型:TextView?=null
var btn_删除:按钮?=null
var btn_更新:按钮?=null
初始化{
numero=itemView.findviewbyd(R.id.numero)
日期=itemView.findViewById(R.id.date)
plom=itemView.findviewbyd(R.id.plom)
type=itemView.findviewbyd(R.id.type)
btn_delete=itemView.findViewById(R.id.btn_Supplier)
btn_update=itemView.findViewById(R.id.btn_修饰符)
}
}
}
这是列表

class ListInter

    {
        var list= LinkedList<InterItem>()
       get() = field
        set(value){field = value}
    }
class-listiner
{
var list=LinkedList()
get()=字段
设置(值){field=value}
}

RecyclerView无法自行处理阵列更改事件。因此,在将元素添加到数组后,应通过调用以下命令来通知它:

recyclerView.getAdapter().notifyItemInserted(items.size() - 1)

你是怎么解释的,当我把add evn放进去的时候,它会使元素变得清晰,尽管我还没有试着去做。那个么,请看你们分享的代码片段,特别是我应该把它放在我的代码中的什么地方。我不知道该怎么用,我不是英国人,所以我一点也听不懂你说的话。你的意思是,如果你的房车里有1233个,当你点击确认按钮后,它变成1233个?是的,绝对是这样。我会说法语或阿拉伯语我会用抱歉,我第一次展示ListInter()类时弄错了,现在更新问题。