android - 没有在朋友请求片段上显示朋友请求片段 kotlin-firebase
问题描述
问题是我想在一个名为 FriendsFragment 的片段中显示所有朋友请求。这个片段调用一个适配器类,其中包含一个名为 ViewHolder 的内部类。但是朋友的请求没有显示。logcat 中总是显示一条消息“未连接适配器;跳过布局”。有什么问题?
这是我的名为 FriendsFragment 的片段的代码:
class FriendsFragment : Fragment() {
private var recyclerView1: RecyclerView?=null
private var recyclerView2: RecyclerView?=null
private var mUsers:MutableList<Users>?=null
private var friendAdapter:FriendAdapter?=null
private lateinit var mAuth: FirebaseAuth
private var currentState:String?=""
private var firebaseUserId:String=""
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view= inflater.inflate(R.layout.fragment_friends, container, false)
recyclerView1=view.findViewById(R.id.recycler_requests)
recyclerView1?.setHasFixedSize(true)
recyclerView1?.layoutManager=LinearLayoutManager(context)
recyclerView2=view.findViewById(R.id.recycler_Friends)
recyclerView2?.setHasFixedSize(true)
recyclerView2?.layoutManager=LinearLayoutManager(context)
mUsers=ArrayList()
mAuth=FirebaseAuth.getInstance()
firebaseUserId=mAuth.currentUser!!.uid
val usersRef=FirebaseDatabase.getInstance("https://online-chat-541f3-default-rtdb.firebaseio.com").reference.child("Users")
val requestRef =
FirebaseDatabase.getInstance("https://online-chat-541f3-default-rtdb.firebaseio.com").reference.child(
"Friends Requests"
)
usersRef.addValueEventListener(object:ValueEventListener{
override fun onDataChange(p0: DataSnapshot) {
mUsers?.clear()
for (snapshot in p0.children) {
val users: Users? = snapshot.getValue(Users::class.java)
if (!(users!!.getUid()).equals(firebaseUserId) && users != null) {
if(p0.child(firebaseUserId).child(users.getUid().toString()).child("request_type").value=="received" &&
p0.child(users.getUid().toString()).child(firebaseUserId).child("request_type").value=="sent"
) {
mUsers?.add(users)
friendAdapter =
context?.let {
FriendAdapter(
it,
mUsers as ArrayList<Users>,
false
)
}
friendAdapter?.notifyDataSetChanged()
recyclerView1!!.adapter = friendAdapter
}
}
}
}
override fun onCancelled(p0: DatabaseError) {
}
})
return view
}
}
用于显示好友请求的回收器视图是 recyclerView1。这也是附加到 View Holder 的布局的 xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/friendsProfileResource"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/username"
>
</de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:id="@+id/usernameFriendsResource"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/friendsProfileResource"
android:layout_marginTop="10dp"
android:layout_marginStart="30dp"
android:text="Username"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorPrimaryDark"
>
</TextView>
<ImageView
android:id="@+id/online_status_img"
android:layout_width="15dp"
android:layout_height="15dp"
android:src="@drawable/online"
android:layout_below="@id/usernameFriendsResource"
android:layout_marginLeft="40dp"
android:layout_marginTop="10dp"
android:visibility="invisible"
>
</ImageView>
<TextView
android:id="@+id/last_message_friends_ressource"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/usernameFriendsResource"
android:layout_toRightOf="@id/friendsProfileResource"
android:layout_marginTop="5dp"
android:layout_marginStart="30dp"
android:text="last message"
android:textSize="18sp"
android:maxLines="1"
android:textColor="@color/colorPrimary"
>
</TextView>
<Button
android:id="@+id/accept_friend_button"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/usernameFriendsResource"
android:layout_marginStart="40dp"
android:text="Accept"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorPrimaryDark"
android:background="@drawable/buttons2"
android:textAllCaps="false"
>
</Button>
<Button
android:id="@+id/cancel_friend_button"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/accept_friend_button"
android:layout_marginStart="10dp"
android:text="Cancel"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorPrimaryDark"
android:background="@drawable/buttons2"
android:textAllCaps="false"
android:layout_marginEnd="10dp"
>
</Button>
</RelativeLayout>
</LinearLayout>
这也是friendsAdapter类的代码:
package com.example.online_chat.Adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.online_chat.Models.Users
import com.example.online_chat.R
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import de.hdodenhof.circleimageview.CircleImageView
class FriendAdapter(private var mContext: Context,private var mUsers: List<Users>,private var isChatChecked:Boolean):RecyclerView.Adapter<FriendAdapter.ViewHolder?>() {
private var currentState:String?=""
private lateinit var mAuth:FirebaseAuth
private var firebaseUserId:String=""
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view=LayoutInflater.from(mContext).inflate(R.layout.user_friends,parent,false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val users=mUsers[position]
holder.usernameFriend!!.text=users.getUsername()
holder.fullNameFriend!!.text=users.getFullName()
Picasso.get().load(users.getProfile()).into(holder.profileImageFriend)
mAuth= FirebaseAuth.getInstance()
firebaseUserId=mAuth.currentUser!!.uid
}
override fun getItemCount(): Int {
return mUsers.size
}
class ViewHolder(itemView: View):RecyclerView.ViewHolder(itemView){
var usernameFriend:TextView?=itemView.findViewById(R.id.usernameFriendsResource)
var fullNameFriend:TextView?=itemView.findViewById(R.id.last_message_friends_ressource)
var profileImageFriend:CircleImageView?=itemView.findViewById(R.id.friendsProfileResource)
var acceptBtn: Button?=itemView.findViewById(R.id.accept_friend_button)
var cancelBtn:Button?=itemView.findViewById(R.id.cancel_friend_button)
}
}
谢谢!
解决方案
你确定这个条件有效吗?
if (p0.child(firebaseUserId).child(users.getUid().toString()).child("request_type").value=="received") && p0.child(users.getUid().toString() ).child(firebaseUserId).child("request_type").value=="sent")
您已请求用户收藏,但没有好友请求收藏。我认为您的朋友请求列表只是空的,并且您的适配器从未实例化
我想应该是这样的,请注意有一些伪代码,因为你使用的是 kotlin,你应该使用协程来组织这个逻辑以便更好地理解。
FriendAdapter(it,mUsers as ArrayList<Users>,false)
usersRef.addValueEventListener( DataSnapshot ->
mUsers?.clear()
for (snapshot in p0.children) {
val user: Users? = snapshot.getValue(Users::class.java)
// check that reference
val requestRef = FirebaseDatabase.getInstance("https://online-chat-541f3-default-rtdb.firebaseio.com").reference.child("Friends Requests/" + user.getId())
// this is pseudo code
requestRef.addValueEventListener( friendsdataSnapshot ->
for (friend if friendsDataSnapshot) {
//addFriend to mUsersList
}
friendAdapter = context?.let {
FriendAdapter(it, mUsers as ArrayList<Users>, false)
}
friendAdapter?.notifyDataSetChanged()
recyclerView1!!.adapter = friendAdapter
)
推荐阅读
- sql - Oracle 高值统计
- r - 我应该使用 set.seed 函数模拟每个随机生成器吗?
- angular - Typescript/Angular 5 - 如何确保正在使用函数参数?
- php - 使用 phantomJS 的 Codeception,使用真实浏览器的 fillField 可以,但是当我运行 codeception 时 KO
- ios - 在 Alamofire 中上传图像问题
- c# - 从字符串中剥离字符
- jquery - 在 jQuery datetimepicker 中阻止日期
- ibm-cloud - 无法在 IBM Cloud 中共享服务实例?
- javascript - Adobe Acrobat DC 中的条件格式颜色填充
- python - python中不同级别的反连接pandas数据帧