Android Kotlin Pusher Chatkit не загружает все комнаты в режиме утилизации - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь просмотреть все уже объединенные комнаты в виде утилиты push-chatkit, но, похоже, это не работает. Он загружает только одну комнату после прокрутки. Когда я открываю упражнение, оно отображается пустым. Кроме того, когда я нажимаю на комнату, намерение не запускается, оно просто остается в представлении переработчика. Он должен идти в выбранную комнату чата.

Через Debug я вижу, что подключаюсь к доступным комнатам (их 7), но кажется, что добавляется только одна из них. к взгляду адаптера / переработчика, однако я не могу найти, где он терпит неудачу. Я относительно новичок в kotlin, что, вероятно, добавляет к проблеме.

Здесь - учебник, которому я следую, который, как мне показалось, был бы относительно неплохим для go из коробки, но, похоже, есть некоторые препятствия.

любая помощь приветствуется.

ChatRoomsListActivity

class ChatRoomsListActivity : AppCompatActivity() {
    val adapter = ChatRoomsListAdapter();

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_chat_room_list)
        initRecyclerView()
        initChatManager()
    }

    private fun initRecyclerView() {

        recycler_view.layoutManager = LinearLayoutManager(this@ChatRoomsListActivity)
        recycler_view.adapter = adapter
        /*
        recycler_view.apply {
            val topSpacingDecorator = TopSpacingItemDecoration(30)
            addItemDecoration(topSpacingDecorator)
            recycler_view.layoutManager = LinearLayoutManager(this@ChatRoomsListActivity)
            recycler_view.adapter = adapter
            adapter = ChatRoomsListAdapter();
            adapter = adapter
        }

         */

    }

    private fun initChatManager() {
        val chatManager = ChatManager(
                instanceLocator = "xxxxxxxxxxxxxx",
                userId = "username1-PCKid",
                dependencies = AndroidChatkitDependencies(
                        tokenProvider = ChatkitTokenProvider(
                                endpoint = "yyyyyyyyyyyyyyyyyyy",
//                                endpoint = "http://10.0.2.2:3000/auth",
                                userId = "username1-PCKid"
                        )
                )
        )

        chatManager.connect(listeners = ChatListeners(
                onErrorOccurred = { },
                onAddedToRoom = { },
                onRemovedFromRoom = { },
                onCurrentUserReceived = { },
                onNewReadCursor = { },
                onRoomDeleted = { },
                onRoomUpdated = { },
                onPresenceChanged = { u, n, p -> },
                onUserJoinedRoom = { u, r -> },
                onUserLeftRoom = { u, r -> },
                onUserStartedTyping = { u, r -> },
                onUserStoppedTyping = { u, r -> }
        )) { result ->
            when (result) {
                is Result.Success -> {
                    // We have connected!
                    val currentUser = result.value
                    AppController.currentUser = currentUser
                    val userJoinedRooms = ArrayList<Room>(currentUser.rooms)
                    for (i in 0 until userJoinedRooms.size) {
                        adapter.addRoom(userJoinedRooms[i]) // reads users rooms
                    }

                    currentUser.getJoinableRooms { result ->
                        when (result) {
                            is Result.Success -> {
                                // Do something with List<Room>
                                val rooms = result.value
                                runOnUiThread {
                                    for (i in 0 until rooms.size) {
                                        adapter.addRoom(rooms[i])
                                    }
                                }
                            }
                        }
                    }

                    adapter.setInterface(object : ChatRoomsListAdapter.RoomClickedInterface {
                        override fun roomSelected(room: Room) {
                            if (room.memberUserIds.contains(currentUser.id)) {
                                // user already belongs to this room
                                roomJoined(room)
                                Log.d("roomSelected", "user already belongs to this room: " + roomJoined(room))
                            } else {
                                currentUser.joinRoom(
                                        roomId = room.id,
                                        callback = { result ->
                                            when (result) {
                                                is Result.Success -> {
                                                    // Joined the room!
                                                    roomJoined(result.value)
                                                }
                                                is Result.Failure -> {
                                                    Log.d("TAG", result.error.toString())
                                                }
                                            }
                                        }
                                )
                            }
                        }
                    })
                }

                is Result.Failure -> {
                    // Failure
                    Log.d("TAG", result.error.toString())
                }
            }
        }
    }

    private fun roomJoined(room: Room) {
        val intent = Intent(this@ChatRoomsListActivity, ChatRoomActivity::class.java)
        intent.putExtra("room_id", room.id)
        intent.putExtra("room_name", room.name)
        startActivity(intent)
    }
}

ChatRoomsListAdapter

class ChatRoomsListAdapter: RecyclerView.Adapter<ChatRoomsListAdapter.ViewHolder>() {
    private var list = ArrayList<Room>()
    private var roomClickedInterface: RoomClickedInterface? = null

//    lateinit var roomClickedInterface:RoomClickedInterface

    fun addRoom(room:Room){
        list.add(room)
        notifyDataSetChanged()
//        Log.d("Rooms", room.toString())
    }

    fun setInterface(roomClickedInterface:RoomClickedInterface){
        this.roomClickedInterface = roomClickedInterface
//        roomClickedInterface = roomClickedInterface
    }

    override fun getItemCount(): Int {
        return list.size
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
                .inflate(
//                        R.layout.chat_list_row,
                        android.R.layout.simple_list_item_1,
                        parent,
                        false
                )

        return ViewHolder(view)
    }
/*
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent!!.context)
                .inflate(
                        android.R.layout.simple_list_item_1,
                        parent,
                        false
                )

        return ViewHolder(view)
    }

 */

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.roomName.text = list[position].name

    }
/*
    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
        holder!!.roomName.text = list[position].name
    }

 */

    inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView), View.OnClickListener {
        override fun onClick(p0: View?) {
            roomClickedInterface?.roomSelected(list[adapterPosition])
            Toast.makeText(itemView.context, "hello test", Toast.LENGTH_LONG).show();
            Log.d("test", "testing console log")


        }

        var roomName: TextView = itemView.findViewById(android.R.id.text1)

        init {
            itemView.setOnClickListener(this)

        }
    }

    interface RoomClickedInterface{
        fun roomSelected(room:Room)
    }
}

Комнаты, которые должны отображаться в Recyclerview 1) enter image description here

2) enter image description here

Вот как это выглядит после прокрутки в любом направлении 3) enter image description here

1 Ответ

0 голосов
/ 27 января 2020

Вам необходимо убедиться, что вы звоните adapter.notifyDataSetChanged () . Так что измените

 currentUser.getJoinableRooms { result ->
  when (result) {
    is Result.Success -> {
      // Do something with List<Room>
      val rooms = result.value
      runOnUiThread {
        for (i in 0 until rooms.size) {
          adapter.addRoom(rooms[i])
        }
      }
    }
  }

на

currentUser.getJoinableRooms { result ->
  when (result) {
    is Result.Success -> {
      // Do something with List<Room>
      val rooms = result.value
      runOnUiThread {
        for (i in 0 until rooms.size) {
          adapter.addRoom(rooms[i])
        }
        adapter.notifyDataSetChanged()
      }
    }
  }
...