Vik*_*alp 0 android kotlin android-recyclerview
我正在使用 Kotlin ,当我从 Recyclerview 中删除该项目时,它会重新排列列表中的项目,这就是我的编码方式。我在java中也做了同样的事情,但在java中它工作得很好。但在 kotlin 中它会产生问题。
mylist.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position,mylist.size)
Run Code Online (Sandbox Code Playgroud)
这是我的代码,用于删除适配器中的项目,下面是我如何在列表中设置数据
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)
}
}
Run Code Online (Sandbox Code Playgroud)
//这里有一些图像,您可以很好地理解列表是如何洗牌的
感谢大家的帮助。我已尽力提供帮助。
在您的 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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20447 次 |
| 最近记录: |