如何使用 Firebase Firestore 在 Android 中创建动态底部表单对话框?

androidapps/applicationsmobile development

Android 中的动态底部表单是指从屏幕底部向上滑动的用户界面元素,用于显示额外的信息、选项或活动。与静态底部表单(包含固定内容)不同,动态底部表单会从 Firebase Firestore 等数据源获取数据,从而允许开发人员使用重要信息高效地填充表单。这支持实时更新和自定义,无需修改应用代码。动态脚注通过提供相关且最新的内容(例如客户资料、产品细节或菜单选项)来改善客户体验,这些内容以实用且外观吸引人的方式呈现,从而提升整体客户体验和应用实用性。

使用方法

  • 手动实施

手动实施

在使用 Firebase Firestore 在 Android 中创建动态脚注交易的场景中,手动实施是指使用编程技术对脚注会话的功能和行为进行物理编码和定义的过程。开发人员无需依赖预先构建的库或程序,就可以完全控制从头开始设计和执行动态脚注。手动实施包括从 Firebase Firestore 中获取数据、手动填充脚注内容、管理客户交互以及管理交易的流程和动作等任务。这种方法提供了灵活性和自定义选项,允许开发人员创建有趣且自定义的页脚对话框,以适应其应用的设计和要求。

算法

  • 启动应用程序。

  • 初始化 Firebase Firestore 并设计关键依赖项。

  • 为活动的页脚对话框创建布局文件。

  • 为脚注语句片段定义路径。

  • 为脚注语句片段实现基本策略和受众。

  • 设置布局并查看页脚对话框。

  • 使用合适的查询从 Firebase Firestore 检索数据。

  • 映射恢复的数据到比较对象。

  • 根据恢复的数据,用动态内容填充脚注。

  • 在脚注语句中处理用户行为,例如按钮点击或对象选择。

  • 根据用户输入更新 UI 或执行关键操作。

  • 测试应用程序,确保动态脚注事务处理性能符合预期。

  • 优化代码以提高执行效率和内存使用率。

  • 妥善处理任何潜在错误或特殊情况。

  • 完成应用程序,进行全面测试,并根据用户反馈或错误报告进行必要的更改。

示例

XML 程序

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/idRLBottomSheet"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="@color/white"
   android:padding="20dp">

   <!-- ImageView for displaying our image -->
   <ImageView
      android:id="@+id/idIVimage"
      android:layout_width="120dp"
      android:layout_height="120dp"
      android:layout_margin="10dp"
      android:padding="5dp"
      android:src="@drawable/your_image" />

   <!-- Text view for displaying a heading text -->
   <TextView
      android:id="@+id/idTVtext"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_margin="10dp"
      android:layout_toRightOf="@id/idIVimage"
      android:padding="5dp"
      android:text="Updated Message One"
      android:textColor="@color/black"
      android:textSize="20sp"
      android:textStyle="bold" />

   <!-- Text View for displaying description text -->
   <TextView
      android:id="@+id/idTVtextTwo"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/idTVtext"
      android:layout_margin="10dp"
      android:layout_marginTop="10dp"
      android:layout_toEndOf="@id/idIVimage"
      android:padding="5dp"
      android:text="Updated Message Two"
      android:textColor="@color/black"
      android:textSize="16sp" />

   <!-- Add a border to the RelativeLayout -->
   <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/idTVtextTwo"
      android:background="@drawable/border"
      android:padding="10dp">

      <!-- Add more text views with different colors -->
      <TextView
         android:id="@+id/idTVtextThree"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentStart="true"
         android:text="Updated Message Three"
         android:textColor="@color/blue"
         android:textSize="14sp" />

      <TextView
         android:id="@+id/idTVtextFour"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@id/idTVtextThree"
         android:layout_marginTop="10dp"
         android:layout_toEndOf="@id/idTVtextThree"
         android:text="Updated Message Four"
         android:textColor="@color/red"
         android:textSize="14sp" />

      <!-- Add a button with a background color -->
      <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@id/idTVtextFour"
         android:background="@drawable/button_background"
         android:text="Button"
         android:textColor="@color/white" />

   </RelativeLayout>

</RelativeLayout>

主题的 XML 程序

<style name="BottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
   <item name="bottomSheetStyle">@style/BottomSheetStyle</item>
</style>

<style name="BottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
	<item name="android:background">@android:color/transparent</item>
</style>

Java 程序

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {

   // Firebase Firestore 和底部工作表 RelativeLayout 的变量
   private FirebaseFirestore db;
   private RelativeLayout bottomSheetRL;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // 初始化 Firebase Firestore 和底部工作表 RelativeLayout
      db = FirebaseFirestore.getInstance();
      bottomSheetRL = findViewById(R.id.idRLBottomSheet);

      // 调用方法显示底部表单
        displayBottomSheet();
   }

   private void displayBottomSheet() {

    // 创建 BottomSheetDialog
    final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(MainActivity.this, R.style.BottomSheetDialogTheme);
    
    // 为底部表单对话框填充布局文件
    View layout = LayoutInflater.from(MainActivity.this).inflate(R.layout.bottom_sheet_layout, bottomSheetRL);
    
    // 将填充后的布局文件设置为底部表单对话框
    bottomSheetDialog.setContentView(layout);
    
    // 使底部表单对话框可取消,并设置为触摸外部时取消
    bottomSheetDialog.setCancelable(true);
    bottomSheetDialog.setCanceledOnTouchOutside(true);
    
    // 显示底部表单对话框
    bottomSheetDialog.show();
    
    // 从填充后的布局初始化图像视图和文本视图
    ImageView imageIV = layout.findViewById(R.id.idIVimage);
    TextView textOneTV = layout.findViewById(R.id.idTVtext);
    TextView textTwoTV = layout.findViewById(R.id.idTVtextTwo);
    
    // 为我们的 Firestore 集合和文档创建文档引用
    DocumentReference documentReference = db.collection("BottomSheetDialog").document("Data");
    
    // 为文档引用添加快照监听器
    documentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
         @Override
         public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
            // onEvent 方法内部
            if (error != null) {
               // 如果错误不为空,则处理错误
               Toast.makeText(MainActivity.this, "Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
               return;
            }

            if (value != null && value.exists()) {
               // 从 Firestore 文档中检索数据并将其设置到视图
               textOneTV.setText(value.getString("textOne"));
               Picasso.get().load(value.getString("Image")).into(imageIV);
               textTwoTV.setText(value.getString("textTwo"));
            }
         }
      });
   }
}

输出

结论

本文提供了在 Android 系统中利用 Firebase Firestore 创建动态脚注的全面指南。动态脚注是一个从屏幕底部向上滑动的用户界面组件,显示从 Firebase Firestore 获取的重要实时数据。通过采用手动使用方法,开发人员可以完全控制脚注交换功能的规划和执行。本文追溯了关键步骤,包括初始化 Firebase Firestore、定义布局、实现必要的策略和受众、从 Firestore 中获取数据、使用动态内容填充脚注、处理用户数据、测试功能以及优化代码。总而言之,本文提供了在 Android 系统中创建动态脚注交换的实用且详细的说明。


相关文章