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