我创建了一个 android 应用程序(示例 APK和Github 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
我正在开发一个聊天应用程序,其中消息存储在 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 获取消息,这样它就不会读取其他人的聊天内容,并为我提供安全、可维护且价格合理的数据库。 …
我正在处理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
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
我正在尝试在未接收的发布应用程序中发送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)
和其他依赖项,我不将它们包含在这里,因为应用程序在调试模式下工作正常
已编辑
我已经有了
android push-notification google-play firebase firebase-cloud-messaging
我正在开发一个 Android 应用程序,人们会在其中分享他们的技能之类的东西,但现在的问题是我想要一个技能列表,以便用户可以轻松地从linkedinAutoCompleteTextView的建议中搜索和选择技能。
但对于 autoCompleteTextView,我们需要一个字符串数组来显示在 autoComplete 列表中。但我没能找到任何 api。而且我也无法在stings.xml中的应用程序中创建字符串数组,因为它会将 apk 的大小增加到 5 到 6 MB。
我需要一个解决方案。