首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Kotlin Pusher Chatkit没有将所有房间装进回收设备的视野中

Android Kotlin Pusher Chatkit没有将所有房间装进回收设备的视野中
EN

Stack Overflow用户
提问于 2020-01-08 16:32:23
回答 1查看 52关注 0票数 0

我试着去查看所有已经加入的房间,在pusher聊天包回收者的观点,然而,它似乎不起作用。我滚动后它只装了一个房间。当我打开活动时,它显示为空白。此外,当我点击房间,意图还没有开始,它只是停留在回收者的看法。它应该去选定的聊天室。

通过调试,我可以看到,我正在连接到可访问的房间(有7间),然而,似乎只有其中一个被添加到适配器/回收视图,但我找不到它的不足。我对kotlin相对来说是个新手,这可能增加了这个问题。

这里是我所遵循的教程,我认为这将是比较好的走出盒子,但它似乎有一些障碍。

任何和所有的帮助都是感激的。

ChatRoomsListActivity

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
    }
}

房,应在1中显示)

2)

,这就是我滚动任何方向的3之后的样子

EN

回答 1

Stack Overflow用户

发布于 2020-01-27 14:16:36

您需要确保正在调用adapter.notifyDataSetChanged()。所以改变

代码语言:javascript
复制
 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])
        }
      }
    }
  }

代码语言:javascript
复制
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()
      }
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59650155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档