如何为每个想要订购商品时登录的用户拆分FirebaseRecyclerOptions视图,因为会显示所有其他用户的订单数据?[在此输入图像描述][1]
1.MenuProsecs.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.适配器玫瑰
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.用户帮助类
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;
}
}
[在此输入链接描述][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);
...