如何为要订购商品时登录的每个用户拆分 FirebaseRecyclerOptions 视图

How to Split FirebaseRecyclerOptions View for each user who is logged in when want to order goods

如何为每个想要订购商品时登录的用户拆分 FirebaseRecyclerOptions 视图,因为所有其他用户的订单数据都会显示? [在此处输入图片描述][1]

1. MenuProses.java

package com.example.al_hafiz.User;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.al_hafiz.Common.NetworkChangeListener;
import com.example.al_hafiz.Common.StartUpScreen;
import com.example.al_hafiz.Database.PesanHelperClass;
import com.example.al_hafiz.Database.SessionManager;
import com.example.al_hafiz.Database.UserHelperClass;
import com.example.al_hafiz.HelperClasses.ProsesAdapter;
import com.example.al_hafiz.R;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.database.FirebaseDatabase;

public class MenuProses extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    //variable network
    NetworkChangeListener networkChangeListener = new NetworkChangeListener();
    static final float END_SCALE = 0.7f;
    //Draw menu
    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;
    LinearLayout contentView;
    TextView Username;
    TextView nama, email, sandi, tgl, hp, kelamin;
    
    //RecyclerView
    RecyclerView recyclerView;
    ProsesAdapter prosesAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_menu_proses);


        //RecyclerView
        recyclerView = findViewById(R.id.recyclerviewproses);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        FirebaseRecyclerOptions<PesanHelperClass> options =
                new FirebaseRecyclerOptions.Builder<PesanHelperClass>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Order"), PesanHelperClass.class)
                        .build();
        prosesAdapter = new ProsesAdapter(options);
        recyclerView.setAdapter(prosesAdapter);


        //menu hooks
        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        toolbar = findViewById(R.id.toolbar);
        contentView = findViewById(R.id.content);
        nama = findViewById(R.id.full_name_profile);
        email = findViewById(R.id.email_profile);
        Username = findViewById(R.id.username_field);
        tgl = findViewById(R.id.ttl_profile);
        hp = findViewById(R.id.phone_profile);
        kelamin = findViewById(R.id.gender_profile);
        sandi = findViewById(R.id.sandi_profile);

        //toolbar
        setSupportActionBar(toolbar);


        //navigation menu
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navi_drawer_open, R.string.navi_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();
        navigationView.bringToFront();
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.Home);
        animateNavigationDrawed();
        BottomNavigationView bottom = findViewById(R.id.navigasi_bawah);


        bottom.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.Konfirmasi:
                        break;
                    case R.id.Packing:
                        Intent menupaking = new Intent(getApplicationContext(), MenuPacking.class);
                        startActivity(menupaking);
                        finish();
                        break;
                    case R.id.Kirim:
                        Intent menukirim = new Intent(getApplicationContext(), MenuPacking.class);
                        startActivity(menukirim);
                        finish();
                        break;
                }
                return true;
            }
        });
    }

    private void animateNavigationDrawed() {
        drawerLayout.setScrimColor(getResources().getColor(R.color.colorAccent));
        drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                final float diffScaledOfset = slideOffset * (1 - END_SCALE);
                final float offsetScale = 1 - diffScaledOfset;
                contentView.setScaleX(offsetScale);
                contentView.setScaleY(offsetScale);

                final float xOffset = drawerView.getWidth() * slideOffset;
                final float xOffsetDiff = contentView.getWidth() * diffScaledOfset / 2;
                final float xTranslation = xOffset - xOffsetDiff;
                contentView.setTranslationX(xTranslation);
            }
        });
    }

    @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case R.id.Home:
                Intent home = new Intent(getApplicationContext(), UserDashboard.class);
                startActivity(home);
                finish();
                break;
            case R.id.order1:
                Intent order = new Intent(getApplicationContext(), MenuOrder.class);
                startActivity(order);
                finish();
                break;
            case R.id.riwayat1:
                Intent riwayat = new Intent(getApplicationContext(), Riwayat.class);
                startActivity(riwayat);
                finish();
                break;
            case R.id.proses1:
                break;
            case R.id.profil1:
                Intent profil = new Intent(getApplicationContext(), Profil_User.class);
                startActivity(profil);
                finish();
                break;
            case R.id.ganti_password1:
                Intent password = new Intent(getApplicationContext(), GantiPassword.class);
                startActivity(password);
                finish();
                break;
            case R.id.logout1:
                logout();
                break;
            case R.id.sahre1:
                Toast.makeText(this, "Telah Dibagikan", Toast.LENGTH_SHORT).show();
                break;
        }
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

    private void logout() {
        SessionManager sessionManager = new SessionManager(MenuProses.this, SessionManager.SESSION_USERSESSION);
        sessionManager.logoutFromSession();
        startActivity(new Intent(getApplicationContext(), StartUpScreen.class));
        finish();
        Toast.makeText(MenuProses.this, "Behasil Logout !", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStart() {
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(networkChangeListener, filter);
        super.onStart();
        prosesAdapter.startListening();
    }

    @Override
    protected void onStop() {
        unregisterReceiver(networkChangeListener);
        super.onStop();
        prosesAdapter.stopListening();
    }
}

2。 AdapterProses

package com.example.al_hafiz.HelperClasses;


import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.al_hafiz.Database.PesanHelperClass;
import com.example.al_hafiz.R;
import com.example.al_hafiz.User.MenuProses;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.FirebaseDatabase;
import com.orhanobut.dialogplus.DialogPlus;
import com.orhanobut.dialogplus.ViewHolder;

import java.util.HashMap;
import java.util.Map;

public class ProsesAdapter extends FirebaseRecyclerAdapter<PesanHelperClass, ProsesAdapter.myViewHolder> {

    /**
     * Initialize a {@link RecyclerView.Adapter} that listens to a Firebase query. See
     * {@link FirebaseRecyclerOptions} for configuration options.
     *
     * @param options
     */
    public ProsesAdapter(@NonNull FirebaseRecyclerOptions<PesanHelperClass> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull myViewHolder holder, @SuppressLint("RecyclerView") final int position, @NonNull PesanHelperClass model) {
        holder.nama.setText(model.getNamaorder());
        holder.alamat.setText(model.getAlamatorder());
        holder.telepon.setText(model.getTeleponorder());
        holder.jumlah.setText(model.getJumlahorder());
        holder.bayar.setText(model.getPilihpembayaran());

        holder.btnEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final DialogPlus dialogPlus = DialogPlus.newDialog(holder.btnEdit.getContext())
                        .setContentHolder(new ViewHolder(R.layout.update_popup))
                        .setExpanded(true, 1300)
                        .create();

                View view = dialogPlus.getHolderView();
                EditText nama = view.findViewById(R.id.namaproses_update);
                EditText alamat = view.findViewById(R.id.alamatproses_update);
                EditText telepon = view.findViewById(R.id.teleponproses_update);
                EditText jumlah = view.findViewById(R.id.jumlahproses_update);
                EditText bayar = view.findViewById(R.id.bayarproses_update);

                Button btnupdate = view.findViewById(R.id.btn_update_pro);

                nama.setText(model.getNamaorder());
                alamat.setText(model.getAlamatorder());
                telepon.setText(model.getTeleponorder());
                jumlah.setText(model.getJumlahorder());
                bayar.setText(model.getPilihpembayaran());

                dialogPlus.show();

                btnupdate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Map<String, Object> map = new HashMap<>();
                        map.put("namaorder", nama.getText().toString());
                        map.put("alamatorder", alamat.getText().toString());
                        map.put("teleponorder", telepon.getText().toString());
                        map.put("jumlahorder", jumlah.getText().toString());
                        map.put("pilihpembayaran", bayar.getText().toString());


                        FirebaseDatabase.getInstance().getReference().child("Order")
                                .child(getRef(position).getKey()).updateChildren(map)
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void unused) {
                                        Toast.makeText(holder.nama.getContext(), "Data Berhasil Di Update", Toast.LENGTH_SHORT).show();
                                        dialogPlus.dismiss();
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(Exception e) {
                                        Toast.makeText(holder.nama.getContext(), "Data Gagal DiUpdate", Toast.LENGTH_SHORT).show();
                                        dialogPlus.dismiss();
                                    }
                                });
                    }
                });
            }
        });

        holder.btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(holder.nama.getContext());
                builder.setTitle("Apakah Anda Yakin ?");
                builder.setMessage("Data Yang Telah Terhapus Tidak Bisa Kembali Lagi.");

                builder.setPositiveButton("Hapus", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        FirebaseDatabase.getInstance().getReference().child("Order")
                                .child(getRef(position).getKey()).removeValue();
                    }
                });
                builder.setNegativeButton("Batal", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(holder.nama.getContext(), "Data Batal Dihapus", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.show();
            }
        });
    }

    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_menu_proses_item, parent, false);
        return new myViewHolder(view);
    }

    class myViewHolder extends RecyclerView.ViewHolder {
        TextView nama, alamat, telepon, jumlah, bayar;
        Button btnEdit, btnDelete;

        public myViewHolder(@NonNull View itemView) {
            super(itemView);
            nama = itemView.findViewById(R.id.namaproses);
            alamat = itemView.findViewById(R.id.alamatproses);
            telepon = itemView.findViewById(R.id.telpproses);
            jumlah = itemView.findViewById(R.id.jmlorder);
            bayar = itemView.findViewById(R.id.cashorinvoice);

            btnEdit = (Button) itemView.findViewById(R.id.button_edit_proses);
            btnDelete = (Button) itemView.findViewById(R.id.button_delete_proses);

        }
    }

}

3。 UserHelperClass

package com.example.al_hafiz.Database;

public class UserHelperClass {


    String fullName, username, email, password, gender, date, phoneNo;

    public UserHelperClass() {
    }

    public UserHelperClass(String fullName, String email, String username, String password, String date, String gender, String phoneNo) {
        this.fullName = fullName;
        this.username = username;
        this.email = email;
        this.password = password;
        this.gender = gender;
        this.date = date;
        this.phoneNo = phoneNo;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getPhoneNo() {
        return phoneNo;
    }

    public void setPhoneNo(String phoneNo) {
        this.phoneNo = phoneNo;
    }
}

[在此处输入 link 描述][2]

[1]: https://i.stack.imgur.com/sijuX.png 图片查看项目

您当前正在将 /Order 的所有子节点加载到此处的回收器适配器中:

FirebaseRecyclerOptions<PesanHelperClass> options =
        new FirebaseRecyclerOptions.Builder<PesanHelperClass>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("Order"), PesanHelperClass.class)
                .build();
prosesAdapter = new ProsesAdapter(options);

如果每个子节点都有一个 属性 来标识订单所属的用户,您可以使用查询来仅获取特定用户的订单。

因此,例如,如果您使用 Firebase 身份验证并将用户的 UID 存储在每个订单的 属性 uid 中,您只能通过以下方式获取当前用户的订单:

if (FirebaseAuth.getInstance().getCurrentUser() != null) {

    //  Determine the UID of the current user
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

    //  Use a query to get only orders for that UID
    DatabaseReference ordersRef = FirebaseDatabase.getInstance().getReference().child("Order");
    Query query = ordersRef.orderByChild("uid").equalTo(uid);

    //  Use the query in the adapter
    FirebaseRecyclerOptions<PesanHelperClass> options =
            new FirebaseRecyclerOptions.Builder<PesanHelperClass>()
                    .setQuery(query, PesanHelperClass.class)
                    .build();
    prosesAdapter = new ProsesAdapter(options);
    ...