小编mr.*_*oot的帖子

Backstack 像 instagram 一样,带有 viewpager 和 BottomNavigationBar

我创建了一个 android 应用程序(示例 APKGithub Repo),我在其中实现了一个BottomNavigationBarwith ViewPager. 导航没问题,但我不知道如何在像 Instagram 这样的 viewpager 中处理返回堆栈。

我尝试了下面的代码,但这样我必须创建一个我从不导航的不必要的片段。

 view_pager_main_activity?.currentItem = view_pager_main_activity.currentItem - 1
Run Code Online (Sandbox Code Playgroud)

假设我只是将应用程序启动到第一页,然后通过 BottomNavBar 导航到第三页,但是现在如果我单击后退按钮,我会通过第二页返回到第一页。所以这样我创建了不需要的第二页。

这是 onBackPressed() 的整个回栈过程

override fun onBackPressed() {

       if (view_pager_main_activity?.currentItem == 0) {
            if (view_pager_main_fragment?.currentItem == 0) {
                val recyclerView = findViewById<RecyclerView>(R.id.listRecyclerView)
                val appbarHome = findViewById<AppBarLayout>(R.id.appbar_home)
                val layoutManager = recyclerView?.layoutManager as LinearLayoutManager
                when {
                    layoutManager.findFirstCompletelyVisibleItemPosition() == 0 -> {
                        super.onBackPressed()
                    }
                    supportFragmentManager.backStackEntryCount != 0 -> {
                        supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
                    }
                    else -> {
                        layoutManager.scrollToPositionWithOffset(0, 0) …
Run Code Online (Sandbox Code Playgroud)

android instagram back-stack bottomnavigationview android-viewpager2

6
推荐指数
0
解决办法
94
查看次数

firebase实时数据库如何读取数据?

我正在开发一个聊天应用程序,其中消息存储在 firebase 实时数据库中。现在,如果我创建一个如下所示的节点 chats-Between-A-and-B-Id 是自动生成的聊天室键,所以我想知道当用户 S在聊天应用程序中打开与用户 T的聊天时,数据库将只读取消息存储在chats-Between-S-and-T-Id 中,不会阅读其他聊天室消息!?我对吗 ?如果是,那么它会降低定价吗?

chats-
      chats-Between-A-and-B-Id-
                 messageID1-…
                 messageID2-…
                 messageID3-…
                 ...
      chats-Between-o-and-p-Id-…
      chats-Between-s-and-t-Id-…
      chats-Between-x-and-y-Id-…
Run Code Online (Sandbox Code Playgroud)

或者

如果我存储如下所示的数据,那么如果用户 S在聊天应用程序中打开用户 T的聊天,那么数据库将读取整个消息并

cahts-
      messageID1-…
      messageID2-…
      messageID3-…
      ...
Run Code Online (Sandbox Code Playgroud)

像(如下所示)对它们进行排序,以便它会读取所有消息并对其进行排序并在应用程序中显示给用户!?这会增加定价吗?

if(chat.getReceiver() == senderID && chat.getSender() == receiverId ||
   chat.getReceiver() == receiverId && chat.getSender() == senderID)
                          {
                             (mChatList as ArrayList<Chat>).add(chat) //show chats
                          }
Run Code Online (Sandbox Code Playgroud)

我想知道哪种方法可以节省我的钱。

编辑

我正在使用第二种方法(我从聊天应用程序教程中得到它)。我们根据发送者和接收者对消息进行排序,但在阅读@sharath 的答案后,我明白如果我这样做,它将读取来自聊天节点的每条消息,然后根据发送者-接收者对它们进行排序,如果有 100 万条消息来自所有用户然后它将读取 100 万条消息,并且只为 2 个用户对其中的一些消息进行排序!它会让我变穷。所以我正在考虑使用第一种方法,我将从 chat>>roomIdBetween2Users 获取消息,这样它就不会读取其他人的聊天内容,并为我提供安全、可维护且价格合理的数据库。 …

android firebase-realtime-database

5
推荐指数
0
解决办法
129
查看次数

禁用其他子片段的视图寻呼机滑动

我正在处理ViewPager2我在 viewpager 中有 2 个片段的地方。它工作得很好,但有一个问题,我希望它只是从FragmentTwo滑动到FragmentOne片段,因为它现在正在工作。但是当我将它从FragmentOne滑动到FragmentTwo 时,它将只能从FragmentOne片段的 FirstFragment 子片段滑动。

我的项目图片, 图片

在此图像中 MainActivity 是放置 viewpager2 的基本活动。它包含 2 个片段,FragmentOne 和 FragmentTwo。FragmentOne 有一个自定义的 viewpager2 用于BottomNavigationView. 它有 3 个片段,第一个是 HomeFragment,这个片段有一个按钮,两个交易到 FragmentTwo。所以我只希望刷卡交易只能从 HomeFragment 发生,而不是从它的孩子或其他两个片段发生。就像 Instagram 一样,我们只能从 HomeFragment 滑动到 ChatFragment。

已编辑

ViewPagerMainActivity 中的代码

  override fun onCreate(savedInstanceState: Bundle?) {
    val mViewPager = findViewById<ViewPager2>(R.id.view_pager_main_activity)
        mViewPager?.offscreenPageLimit = 2
        mViewPager?.apply { // to disable overScrollAnimation
           (getChildAt(0) as? RecyclerView)?.overScrollMode = RecyclerView.OVER_SCROLL_NEVER
        }
  }


internal class MyViewPagerAdapter(fragmentActivity: …
Run Code Online (Sandbox Code Playgroud)

android android-fragments instagram kotlin android-viewpager2

5
推荐指数
1
解决办法
248
查看次数

如何使用 kotlin 协程进行 Firestore 查询

Kotlin我用和创建了一个应用程序Firebase Firestore。现在我需要实现协程,因为主线程上有很多工作。但我也是一个初学者,所以这对我来说是新的东西。我看过一些关于此的教程,但没有找到完整的教程Firestore协程的完整教程。所以我需要一些帮助来在我的应用程序中实现协程,在这样的部分(我自己尝试过,但没有得到它)​​。

从 Firestore 检索帖子。

private fun retrievePosts() {
             FirebaseFirestore.getInstance().collection("Posts")
            .orderBy("timeStamp", Query.Direction.DESCENDING)
            .get()
            .addOnSuccessListener { queryDocumentSnapshots ->
                postList?.clear()
                for (documentSnapshot in queryDocumentSnapshots) {
                    val post = documentSnapshot.toObject(Post::class.java)
                    postList?.add(post)
                }
                postAdapter?.notifyDataSetChanged()
                postAdapter?.setOnPostClickListener(this)
                if (isRefreshed) {
                    swipe_refresh_home?.setRefreshing(false)
                    isRefreshed = false
                }
                swipe_refresh_home?.visibility = VISIBLE
                progress_bar_home?.visibility = GONE
            }.addOnFailureListener { e ->
                Log.d(TAG, "UserAdapter-retrieveUsers: ", e)
                swipe_refresh_home?.visibility = VISIBLE
                progress_bar_home?.visibility = GONE
            }
    }
Run Code Online (Sandbox Code Playgroud)

将用户数据放入适配器

private fun userInfo( fullName: TextView, profileImage: CircleImageView,
                      about: TextView, uid: String,
                      userLocation: TextView, …
Run Code Online (Sandbox Code Playgroud)

android kotlin firebase google-cloud-firestore kotlin-coroutines

5
推荐指数
2
解决办法
3996
查看次数

FCM 通知在发布应用程序中不起作用

我正在尝试在未接收的发布应用程序中发送FCM通知(在用户之间发送消息、好友请求等),但它们在调试 apk 中发送/接收得很好,我对此进行了搜索,发现了一些不起作用的解决方案为我

像这样,我把它放在亲卫规则中但不起作用

 -keep class com.google.firebase.* {*;}
Run Code Online (Sandbox Code Playgroud)

在我的 AndroidManifest.xml 中

        <service
            android:name=".notifications.MyFirebaseMessaging"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <service
            android:name=".notifications.MyFirebaseInstanceId"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
Run Code Online (Sandbox Code Playgroud)

和其他依赖项,我不将它们包含在这里,因为应用程序在调试模式下工作正常

已编辑

我已经有了

  1. 生成的发布 SHA-1 和 SHA-256 密钥
  2. 将它们添加到 firebase 控制台中
  3. 还在 firebase 中添加了 Google 控制台应用程序签名 SHA-1 和 SHA-256 密钥
  4. 然后下载 Google-services.json 文件并将其添加到应用程序模块中

在此输入图像描述 在此输入图像描述

android push-notification google-play firebase firebase-cloud-messaging

4
推荐指数
1
解决办法
7136
查看次数

如何像Linkedin一样获取技能列表?

我正在开发一个 Android 应用程序,人们会在其中分享他们的技能之类的东西,但现在的问题是我想要一个技能列表,以便用户可以轻松地从linkedinAutoCompleteTextView的建议中搜索和选择技能。

但对于 autoCompleteTextView,我们需要一个字符串数组来显示在 autoComplete 列表中。但我没能找到任何 api。而且我也无法在stings.xml中的应用程序中创建字符串数组,因为它会将 apk 的大小增加到 5 到 6 MB。

在此输入图像描述

我需要一个解决方案。

arrays api android autocompletetextview

4
推荐指数
1
解决办法
2450
查看次数