2017-09-21 7 views
0

RecyclerViewAdapter IndexOutOfBoundException :코 틀린 내가 코 틀린 자바에서 이동이 recyclerViewAdapter를 생성 한

class MisPedidosAdapter(private val context: Context, private var pedidos: List<ParseObject>?, private val onMisPedidosClickListener: OnMisPedidosClickListener) : CustomRecyclerViewAdapter() { 

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

    when(getItemViewType(viewType)){ 
     STATIC ->return NoMisPedidosHolder(LayoutInflater.from(parent.context).inflate(R.layout.no_pedidos_recibidos_item, parent, false)) 
     else -> return MisPedidosHolder(LayoutInflater.from(parent.context).inflate(R.layout.mis_pedidos_item, parent, false), onMisPedidosClickListener, pedidos) 
    } 
} 

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 

    if (getItemViewType(position) == STATIC) 
    { 
     val mHolder = holder as NoMisPedidosHolder 
    } 
    else 
    { 
     val mHolder = holder as MisPedidosHolder 

     val pedido = pedidos!![position] 
     val menuShop = pedido.getParseObject("menu_shop") 
     mHolder.numPlati.text = pedido.getNumber("quantity")?.toInt().toString() 
     mHolder.horario.text = pedido.getString("horario") 

     mHolder.dateOrder.text = StringUtils.getDataFormatted("dd MMM yyyy", pedido.createdAt!!) 

    } 
} 

override fun getItemViewType(position: Int): Int = when{ 
    pedidos!!.isEmpty() -> STATIC 
    else -> DINAMIC 
} 

override fun getItemCount(): Int = when{ 
    pedidos!!.isEmpty() -> 1 
    else -> pedidos!!.size 
} 

fun updatePedidos(pedidos: List<ParseObject>) { 
    this.pedidos = pedidos 
    notifyDataSetChanged() 
} 

companion object { 
    private val STATIC = 0 
    private val DINAMIC = 1 
} 
} 

문제는 내가 코 틀린에 list.size을 수행 할 때 아마, 그것은 (예를 들어,도 크기 인덱스를 포함한다는 것입니다 크기는 4이고 {0,1,2,3,4}를 고려합니다. 사이클을 위해 사용할 때 until으로 {0,1,2,3}을 잠글 수 있지만이 경우에는 어떻게해야할지 모릅니다. 누구든지 해결 방법을 알고 있습니까? 감사합니다

+1

목록이 비어있을 때 1을 반환하는 이유는 무엇입니까? –

+0

예를 들어 "No message received"@MuratK와 함께 메시지를 게시합니다. 어댑터가 onBindViewHolder 방법에 위치 1을 보내고 당신이 빈에서 첫 번째 항목을 얻을하려고하기 때문에 – nani

답변

0

당신은 것이

override fun getItemCount(): Int = when{ 
    pedidos!!.isEmpty() -> 0 
    else -> pedidos!!.size 
} 

override fun getItemCount(): Int = when{ 
    pedidos!!.isEmpty() -> 1 
    else -> pedidos!!.size 
} 
+0

더 pedidos.size == 0, 그것은 질문 – nani

+0

의 다른보기를 보인다면 있기 때문에, 맞습니다는 정확하지 않습니다 배열 : 발에 pedido = pedidos! [위치] –

+0

대답을하여 충돌 로그를 공유 @nani 어댑터 – Beyka

0

의 insted 사용이 교체

when(getItemViewType(viewType)){ 

0123와
when(viewType){ 
+0

@Beyka 감사합니다. 방법은'getItemViewType'은 viewType''에'position' 매핑합니다. 겸손한 질문 : 해결책을 시도해 보셨습니까? – nani

+0

이 필요하기 때문에 작동하지 않습니다 – kujeensiti

+0

예는 있지만,이 – nani