如何为Android现有页面加下拉刷新,实现Firebase房间列表同步刷新
下拉刷新功能接入代码
1. Fragment_Main_Dashboard.xml 完整代码
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/colorWhite" tools:context=".Fragment.MainDashboard"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:id="@+id/toollbar" android:layout_height="wrap_content"> <TextView android:id="@+id/hii" android:layout_width="wrap_content" android:layout_height="40dp" android:gravity="center_vertical" android:text="Hey" android:layout_marginLeft="20dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:textColor="@color/colorBlack" android:textSize="17dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/userName" android:layout_width="200dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:layout_height="40dp" android:layout_centerVertical="true" android:text=" " android:textStyle="bold" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:textColor="@color/colorBlack" android:textSize="16dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/hii" app:layout_constraintTop_toTopOf="parent" /> <ImageButton android:id="@+id/calender" android:layout_width="23dp" android:layout_height="23dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginRight="20dp" android:backgroundTint="@color/colorBlack" app:layout_constraintTop_toTopOf="parent" android:background="@drawable/ic_calender"/> <View android:layout_width="match_parent" android:layout_height="0.3dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:background="@color/colorGrey" app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="0dp" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:orientation="vertical" android:visibility="visible" android:layout_centerInParent="true" android:id="@+id/empty" android:gravity="center_horizontal" android:layout_height="wrap_content"> <ImageView android:layout_width="69dp" android:layout_height="85dp" android:background="@drawable/ic_noresult" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="@color/colorGrey" android:layout_marginTop="30dp" android:text="Nothing Found"/> </LinearLayout> <!-- 新增SwipeRefreshLayout包裹滑动区域 --> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/swipeRefreshLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toollbar" android:layout_marginStart="5dp" android:layout_marginTop="5dp" android:layout_marginEnd="5dp" android:layout_marginBottom="5dp"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="0dp" android:orientation="vertical"> <com.testing.clubhome.supporting.FullLengthListView android:id="@+id/roomsList" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:divider="@color/colorWhite" android:scrollbars="none" /> <LinearLayout android:id="@+id/nativead" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="40dp" android:layout_marginRight="5dp" android:layout_marginBottom="20dp" android:orientation="vertical" android:paddingLeft="20dp" android:paddingTop="20dp" android:paddingRight="20dp" android:paddingBottom="20dp" android:visibility="invisible"></LinearLayout> </LinearLayout> </ScrollView> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> <LinearLayout android:id="@+id/createRoom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="8dp" android:paddingRight="8dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginRight="20dp" android:layout_marginBottom="20dp" android:background="@drawable/selected_button" android:orientation="horizontal"> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:layout_margin="10dp" android:backgroundTint="@color/colorWhite" android:background="@drawable/ic_add" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginBottom="10dp" android:layout_marginLeft="0dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:text="New Room" android:textColor="@color/colorWhite" android:textSize="15sp" /> </LinearLayout> </RelativeLayout>
2. MainDashboard.java 完整修改代码
package com.testing.clubhome.Fragment; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RatingBar; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.InstanceIdResult; import com.testing.clubhome.Backend.VoiceService; import com.testing.clubhome.Club.ClubHome; import com.testing.clubhome.Pages.Calender; import com.testing.clubhome.Pages.MainActivity; import com.testing.clubhome.Pages.premiun; import com.testing.clubhome.R; import com.testing.clubhome.Room.RoomHome; import com.testing.clubhome.Room.creaeRoom; import com.testing.clubhome.Room.room; import com.testing.clubhome.supporting.FullLengthListView; import com.testing.clubhome.supporting.roomSearchAdapter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Objects; import java.util.Random; public class MainDashboard extends Fragment { TextView userName; ImageButton calender; LinearLayout createRoom,empty; FullLengthListView roomsList; // 新增下拉刷新控件声明 SwipeRefreshLayout swipeRefreshLayout; FirebaseAuth firebaseAuth; FirebaseDatabase firebaseDatabase; DatabaseReference mDatabase,clubReference,userReference,roomReference; FirebaseUser user; ArrayList<String> onGoingRoom=new ArrayList<>(); roomSearchAdapter roomSarch; boolean prouser=false; int roomremaing; private void Updatetoken(FirebaseUser user){ FirebaseInstanceId.getInstance().getInstanceId() .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() { @Override public void onComplete(@NonNull Task<InstanceIdResult> task) { if (task.isSuccessful()) { FirebaseDatabase.getInstance().getReference("UsersInfo").child(user.getUid()) .child("token").setValue(Objects.requireNonNull(task.getResult()).getToken()); } } }); } // 封装房间数据加载方法,初始加载和下拉刷新都调用此方法 private void loadRoomsData(){ // 清空原有数据避免重复 onGoingRoom.clear(); //Check for Ongoing rooms mDatabase.get().addOnSuccessListener(new OnSuccessListener<DataSnapshot>() { @Override public void onSuccess(DataSnapshot dataSnapshot) { if (dataSnapshot.child("pro").exists()){ prouser=true; }else{ prouser=false; } if (dataSnapshot.child("roomremaining").exists()) { roomremaing= Integer.parseInt(dataSnapshot.child("roomremaining").getValue().toString()); } String name=dataSnapshot.child("name").getValue().toString(); userName.setText(name); if(dataSnapshot.child("Room Participated").exists()){ final String onGoingRoomString = dataSnapshot.child("Room Participated").getValue().toString(); roomReference.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() { @Override public void onComplete(@NonNull Task<DataSnapshot> task) { if(task.isSuccessful() && task.getResult()!=null){ if(task.getResult().child(onGoingRoomString).exists()) { // 这里补充你原有加载房间数据到onGoingRoom列表的逻辑 // onGoingRoom.add(xxx); } else{ mDatabase.child("Room Participated").removeValue(); } }else{ mDatabase.child("Room Participated").removeValue(); } // 刷新列表适配器 if(roomSarch!=null){ roomSarch.notifyDataSetChanged(); } // 切换空状态显示 if(onGoingRoom.isEmpty()){ empty.setVisibility(View.VISIBLE); }else{ empty.setVisibility(View.GONE); } // 停止刷新动画 swipeRefreshLayout.setRefreshing(false); } }); }else{ // 没有参与的房间也停止刷新 if(onGoingRoom.isEmpty()){ empty.setVisibility(View.VISIBLE); }else{ empty.setVisibility(View.GONE); } swipeRefreshLayout.setRefreshing(false); } } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment_main_dashboard, container, false); firebaseAuth=FirebaseAuth.getInstance(); user=firebaseAuth.getCurrentUser(); firebaseDatabase=FirebaseDatabase.getInstance(); mDatabase=firebaseDatabase.getReference("UsersInfo").child(user.getUid()); userReference=firebaseDatabase.getReference("Connections"); clubReference=firebaseDatabase.getReference("ClubsInfo"); roomReference=firebaseDatabase.getReference("RoomsInfo"); userName=view.findViewById(R.id.userName); calender=view.findViewById(R.id.calender); createRoom=view.findViewById(R.id.createRoom); empty=view.findViewById(R.id.empty); roomsList=view.findViewById(R.id.roomsList); // 初始化下拉刷新控件 swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout); // 设置下拉刷新颜色,可按需修改 swipeRefreshLayout.setColorSchemeResources(R.color.purple_500, R.color.teal_200); // 初始化列表适配器,你原有逻辑补充在此处 roomSarch = new roomSearchAdapter(getContext(), onGoingRoom); roomsList.setAdapter(roomSarch); createRoom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { createtheRoom(); } }); calender.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getActivity(), Calender.class); startActivity(intent); } }); // 下拉刷新监听 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { loadRoomsData(); } }); // 页面初始加载数据 loadRoomsData(); Updatetoken(user); return view; } // 你原有createtheRoom方法补充在此处 private void createtheRoom(){ // 原有创建房间逻辑 } }
内容的提问来源于stack exchange,提问作者Vishal Kukreja
相关产品推荐
相关产品推荐

