Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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_Android_Kotlin_Android Recyclerview - Fatal编程技术网

如何从回收器视图中删除项目android kotlin

如何从回收器视图中删除项目android kotlin,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我正在与Kotlin合作,当我从Recyclerview中删除该项时,它会对列表中的项进行洗牌,这就是我的编码方式。我在java中也做了同样的工作,但在java中工作得非常好。但在科特林,它制造了问题 mylist.removeAt(position) notifyItemRemoved(position) notifyItemRangeChanged(position,mylist.size) 这

我正在与Kotlin合作,当我从Recyclerview中删除该项时,它会对列表中的项进行洗牌,这就是我的编码方式。我在java中也做了同样的工作,但在java中工作得非常好。但在科特林,它制造了问题

                mylist.removeAt(position)
                notifyItemRemoved(position)
                notifyItemRangeChanged(position,mylist.size)
这是我删除适配器中项目的代码 下面是我如何设置列表中的数据

                class Gallery_adm_adp(
val mylist: ArrayList<Model_class_one>,
val fragmentActivity: FragmentActivity,
val pages: Int
      ) :
      RecyclerView.Adapter<Gallery_adm_adp.Viewholder>() {
      var currentpage = 2
      lateinit var loadmore: RelativeLayout
       lateinit var image: ImageView
         lateinit internal var edit_menu: ImageView


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

    @SuppressLint("ShowToast")
    fun mydata(list: Model_class_one?, position: Int) {
        edit_menu = itemView.findViewById(R.id.edit_menu)
        Log.i("List_check", "running position>> " + position)
        loadmore.visibility = View.GONE

        Glide.with(fragmentActivity).load(list!!.Image).into(image)

        if (position == mylist.size - 1) {
            if (pages >= currentpage) {
                loadmore.setVisibility(View.VISIBLE)
                callnextapi()
            } else {
                loadmore.setVisibility(View.GONE)
            }
        } else {
            loadmore.setVisibility(View.GONE)
        }

        edit_menu.setOnClickListener {


            val id = list.ID
            popup(itemView, id, position)
            Log.d("clicks", "position" + position)
        }
    }
}

private fun popup(itemView: View, id: String, position: Int) {
    val popup: PopupMenu
    popup = PopupMenu(fragmentActivity, itemView.edit_menu)
    popup.inflate(R.menu.menu_delete)
    popup.setOnMenuItemClickListener { item ->
        when (item.itemId) {
            R.id.delete -> {
                showdialog(id, position)
            }
        }
        false
    }
    //displaying the popup
    popup.show()
}

private fun showdialog(ids: String, position: Int) {
    val builder = AlertDialog.Builder(fragmentActivity)
    builder.setTitle("Delete")
        .setMessage("Do You Want to delete this post")
        .setCancelable(false)
        .setPositiveButton("Yes") { dialog, id ->
            deleteitem(ids, position)
        }.setNegativeButton("No") { dialogInterface, i ->
        }
    val alert = builder.create()
    alert.show()
}

private fun toast(text: String) {
    ((fragmentActivity as MainActivity_Admin).customtoast(text))
    Toast.makeText(fragmentActivity, text, Toast.LENGTH_SHORT).show()
}

private fun deleteitem(id: String, position: Int) {
    val requestQueue = Volley.newRequestQueue(fragmentActivity)
    val URL = Constant.DeleteGallery + id
    val stringRequest = object : StringRequest(Request.Method.POST, URL,
        Response.Listener { response ->
            Log.i("VOLLEY_res", "my responce>>$response")
            try {
                val result = response
                toast(result)
                mylist.removeAt(position)
                notifyItemRemoved(position)
                notifyItemRangeChanged(position, mylist.size)

            } catch (e: JSONException) {
                e.printStackTrace()
                toast("Can't Delete .. Please Try Again")
            }
        }, Response.ErrorListener { error ->
            toast("Check Internet Connection and Try Again")
        }) {
    }
    requestQueue.add(stringRequest)

}


override fun getItemViewType(position: Int): Int {
    return position
}

private fun callnextapi() {
    val requestQueue = Volley.newRequestQueue(fragmentActivity)
    val URL = Constant.Gallery + currentpage

    val stringRequest = object : StringRequest(Request.Method.POST, URL,
        Response.Listener { response ->
            try {
                val result = JSONObject(response)
                val ListDetails = result.getJSONArray("ListDetails")
                val length = ListDetails.length()
                for (i in 0 until length) {
                    val objJson = ListDetails.getJSONObject(i)
                    val ID = objJson.getString("ID")
                    val UserName = objJson.getString("UserName")
                    val Image = objJson.getString("Image")
                    val UserID = objJson.getString("UserID")
                    var Date = objJson.getString("Date")
                    Date = Date.replace("12:00:00 AM","")
                    mylist.add(Model_class_one(ID, UserName, Image, UserID,Date))
                }
                notifyDataSetChanged()
                currentpage = currentpage + 1

            } catch (e: JSONException) {
                e.printStackTrace()
            }
        }, Response.ErrorListener { error ->
        }) {
    }
    requestQueue.add(stringRequest)

}

override fun onCreateViewHolder(parent: ViewGroup, p1: Int): Gallery_adm_adp.Viewholder {
    val layout = LayoutInflater.from(fragmentActivity as Context?).inflate(R.layout.gallery_adp_admin, parent, false)
    loadmore = layout.findViewById(R.id.loadmore)
    image = layout.findViewById(R.id.image)
    return Viewholder(layout)
}

override fun getItemCount(): Int {
    return mylist.size
}

override fun onBindViewHolder(holder: Gallery_adm_adp.Viewholder, position: Int) {
              val Values = mylist[position]
                holder.mydata(Values, position)
              }

              }
class Gallery\u adm\u adp(
val mylist:ArrayList,
val fragmentActivity:fragmentActivity,
val页面:Int
) :
RecyclerView.Adapter(){
var currentpage=2
lateinit var loadmore:RelativeLayout
lateinit变量映像:ImageView
lateinit内部变量编辑菜单:ImageView
内部类Viewholder(itemView:View):RecyclerView.Viewholder(itemView){
@SuppressLint(“ShowToast”)
趣味mydata(列表:型号\类别\位置:Int){
编辑菜单=itemView.findViewById(R.id.edit菜单)
Log.i(“列表检查”,“运行位置>>”+位置)
loadmore.visibility=View.GONE
滑翔。与(碎片活动)。加载(列表!!.Image)。进入(图像)
if(position==mylist.size-1){
如果(页面>=当前页面){
loadmore.setVisibility(View.VISIBLE)
callnextapi()
}否则{
loadmore.setVisibility(View.GONE)
}
}否则{
loadmore.setVisibility(View.GONE)
}
编辑_menu.setOnClickListener{
val id=list.id
弹出窗口(项目视图、id、位置)
日志d(“点击”,“位置”+位置)
}
}
}
私人娱乐弹出窗口(itemView:View,id:String,position:Int){
val弹出:弹出菜单
popup=PopupMenu(fragmentActivity,itemView.edit_菜单)
弹出。充气(右菜单。菜单\u删除)
popup.setOnMenuItemClickListener{item->
时间(item.itemId){
R.id.delete->{
显示对话框(id、位置)
}
}
假的
}
//显示弹出窗口
popup.show()
}
私人娱乐显示对话框(ID:String,position:Int){
val builder=AlertDialog.builder(碎片活动)
builder.setTitle(“删除”)
.setMessage(“是否要删除此帖子”)
.setCancelable(错误)
.setPositiveButton(“是”){对话框,id->
删除项(ID、位置)
}.setNegativeButton(“否”){dialogInterface,i->
}
val alert=builder.create()
alert.show()
}
私人娱乐吐司(文本:字符串){
((fragmentActivity作为MainActivity_Admin).customtoast(文本))
Toast.makeText(fragmentActivity,text,Toast.LENGTH_SHORT).show()
}
私有项(id:String,position:Int){
val requestQueue=Volley.newRequestQueue(fragmentActivity)
val URL=Constant.DeleteGallery+id
val stringRequest=object:stringRequest(Request.Method.POST,URL,
Response.Listener{Response->
Log.i(“截击”,“我的响应>>$response”)
试一试{
val结果=响应
敬酒(结果)
mylist.removeAt(位置)
已删除的项目(位置)
notifyItemRangeChanged(位置,mylist.size)
}捕获(e:JSONException){
e、 printStackTrace()
toast(“无法删除..请重试”)
}
},Response.ErrorListener{error->
toast(“检查Internet连接并重试”)
}) {
}
添加(stringRequest)
}
覆盖getItemViewType(位置:Int):Int{
返回位置
}
私人娱乐电话NEXTAPI(){
val requestQueue=Volley.newRequestQueue(fragmentActivity)
val URL=常量。库+当前页
val stringRequest=object:stringRequest(Request.Method.POST,URL,
Response.Listener{Response->
试一试{
val结果=JSONObject(响应)
val ListDetails=result.getJSONArray(“ListDetails”)
val length=ListDetails.length()
for(i在0中直到长度){
val objJson=ListDetails.getJSONObject(i)
val ID=objJson.getString(“ID”)
val UserName=objJson.getString(“用户名”)
val Image=objJson.getString(“图像”)
val UserID=objJson.getString(“UserID”)
var Date=objJson.getString(“日期”)
日期=日期。替换为(“上午12:00:00”,“”)
添加(Model_class_one(ID、用户名、图像、用户名、日期))
}
notifyDataSetChanged()
currentpage=currentpage+1
}捕获(e:JSONException){
e、 printStackTrace()
}
},Response.ErrorListener{error->
}) {
}
添加(stringRequest)
}
重写CreateViewHolder(父级:ViewGroup,p1:Int):Gallery\u adm\u adp.Viewholder{
val layout=LAYOUTINGFLATER.from(作为上下文的碎片活动?)。膨胀(R.layout.gallery\u adp\u admin,parent,false)
loadmore=layout.findviewbyd(R.id.loadmore)
image=layout.findviewbyd(R.id.image)
返回视图保持器(布局)
}
重写getItemCount():Int{
返回mylist.size
}
覆盖BindViewHolder(支架:Gallery_adm_adp.Viewholder,位置:Int){
val值=mylist[位置]
holder.mydata(值、位置)
}
}
//这里有一些图片,你们可以很好地理解列表是如何洗牌的


谢谢大家的帮助。我已经做了所有我能帮助的事情。

在Kotlin的项目中尝试此适配器将对您有所帮助:-

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.gropse.dentalsafety.R
import com.gropse.dentalsafety.pojo.GetPlanListResultDentist
import com.gropse.serviceme.utils.AppConstants
import kotlinx.android.synthetic.main.subscription_list_item.view.*
import java.util.*

class PlanListAdapter( private var listener: OnItemClick?) : RecyclerView.Adapter<PlanListAdapter.CategoryViewHolder>() {
    private val list = ArrayList<GetPlanListResultDentist>()
    private  var type= AppConstants.ACTION_NOTHING

    interface OnItemClick {
        fun onClick(bean: GetPlanListResultDentist, type: Int)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
        return CategoryViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.subscription_list_item, parent, false))
    }

    override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
        holder.onBind(position)
    }

    override fun getItemCount(): Int {
        return list.size
    }

    fun removeItem(position: Int) {
        list.remove(position)
        notifyDataSetChanged()
    }

    fun addList(newList: ArrayList<GetPlanListResultDentist>) {
        list.addAll(newList)
        notifyDataSetChanged()
    }

    fun clear() {
        list.clear()
        notifyDataSetChanged()
    }

    inner class CategoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {

        init {
            itemView.setOnClickListener(this)
            itemView.viewList.setOnClickListener(this)
            itemView.editData.setOnClickListener(this)
            itemView.clearItem.setOnClickListener(this)
        }

        fun onBind(position: Int) {
            itemView.tag = position
            itemView.viewList.tag = position
            itemView.editData.tag = position
            itemView.clearItem.tag = position
            val bean = list[position]
            itemView.monthlyrateTV.setText(bean.monthly_fee+"$")
            itemView.yearlyrateTV.setText(bean.yearly_fee+"$")
            itemView.noofferTV.text = bean.services?.size.toString()+" "+"Service Offered"
            if (bean.user_type.equals("0")) {
                itemView.usertypeTV.setText("Adult")
            } else {
                itemView.usertypeTV.setText("Child")
            }


        }

        override fun onClick(v: View) {
            when(v?.id){
                R.id.viewList->{
                    type=AppConstants.TYPE_VIEW_LIST
                }
                R.id.editData->{
                    type=AppConstants.TYPE_EDIT_LIST
                }
                R.id.clearItem->{
                    type=AppConstants.TYPE_CLEAR_LIST
                }
                else->{
                    type=AppConstants.ACTION_NOTHING
                }
            }
            if (listener != null) listener?.onClick(list[v.tag as Int], type)


        }
    }
}
导入android.support.v7.widget.RecyclerView
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入com.gropse.dentalsafety.R
导入com.gropse.dentalsafety.pojo.GetPlanListResultDentist
导入com.gropse。
private var listAdapter: MyListAdapter? = null

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


listAdapter = MyListAdapter(this@YourActivity, yourList, object : MyListClickListener {

            override fun onItemRemoveClick(name: String, position: Int) {
             yourList.removeAt(position)
             listAdapter!!.notifyItemRemoved(position)
           }

}
interface MyListClickListener { 
    fun onItemRemoveClick(name : String,position : Int)
}