Я делаю UBER EATS CLONE APP
У меня на домашнем экране открывается вид ресторанов в режиме утилизации (HomeActivity), теперь, когда я щелкаю ресторан, я иду на страницу меню ресторана (RestaurantActivity). В моем RestaurantActivity также есть представление переработчика, в котором перечислены все пункты меню. После установки моего приложения, когда я нажимаю на ресторан, появляется пустой экран без пунктов меню. Я go возвращаюсь на предыдущую страницу, затем снова нажимаю на ту же категорию, после чего она прекрасно открывается со всеми пунктами меню. Я должен нажать на ресторан два раза, после чего данные загружаются. Почему это происходит, я понятия не имею? Эта проблема не возникает после этого, это происходит только тогда, когда приложение только что установлено. Я прилагаю свой код ниже, пожалуйста, посмотрите его, ребята. Заранее спасибо.
HomeActivity. java
public class HomeActivity extends AppCompatActivity {
final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference restaurant = database.getReference("Restaurant");
RecyclerView recyclerMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
final SearchView searchView = findViewById(R.id.searchView);
FloatingActionButton fab = findViewById(R.id.fab);
BottomAppBar bar = findViewById(R.id.bar);
recyclerMenu = findViewById(R.id.recycler_menu);
recyclerMenu.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerMenu.setLayoutManager(layoutManager);
loadMenu();
bar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavigationDrawerFragment bottomNavigationFragment = new NavigationDrawerFragment();
bottomNavigationFragment.show(getSupportFragmentManager(), "TAG");
searchView.setQuery("", false);
searchView.clearFocus();
}
});
bar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
searchView.setQuery("", false);
searchView.clearFocus();
Toast.makeText(HomeActivity.this, "Account Clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setQuery("", false);
searchView.clearFocus();
Intent i = new Intent(HomeActivity.this, CartActivity.class);
startActivity(i);
}
});
}
private void loadMenu() {
FirebaseRecyclerOptions<Restaurant> options =
new FirebaseRecyclerOptions.Builder<Restaurant>()
.setQuery(restaurant, Restaurant.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Restaurant, MenuViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final MenuViewHolder holder, int position, @NonNull final Restaurant model) {
holder.resName.setText(model.getName());
Picasso.get().load(model.getImg()).into(holder.resLogo);
holder.resPrice.setText(model.getPrice());
holder.resType.setText(model.getType());
holder.resRating.setText(model.getRating().toString());
final Restaurant clickItem = model;
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
String key = getRef(position).getKey();
Intent intent = new Intent(HomeActivity.this, RestaurantActivity.class);
intent.putExtra("arg", key);
startActivity(intent);
}
});
}
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.restaurant_cardview, parent, false);
return new MenuViewHolder(view);
}
};
adapter.startListening();
recyclerMenu.setAdapter(adapter);
}
@Override
public void onBackPressed() {
finish();
}
private void setupBottombar() {
BottomAppBar bar = findViewById(R.id.bar);
AppCompatActivity activity = (AppCompatActivity) getApplicationContext();
if (activity != null) {
activity.setSupportActionBar(bar);
}
}
}
RestaurantActivity. java
package com.example.foodsetgo;
public class RestaurantActivity extends AppCompatActivity {
//Firebase
final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference resTable = database.getReference("Restaurant");
final DatabaseReference itemTable = database.getReference("Items");
RecyclerView recyclerItemList;
String passedArg;
public TextView resName, resPrice, resType, resRating;
public ImageView resLogo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant);
resName = findViewById(R.id.res_name);
resPrice = findViewById(R.id.res_price);
resType = findViewById(R.id.res_type);
resLogo = findViewById(R.id.res_logo);
resRating = findViewById(R.id.res_rating);
recyclerItemList = findViewById(R.id.recycler_item_list);
recyclerItemList.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerItemList.setLayoutManager(layoutManager);
if(getIntent()!=null)
{
passedArg = getIntent().getStringExtra("arg");
}
if(!passedArg.isEmpty() && passedArg!=null)
{
loadItemList(passedArg);
}
resTable.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Restaurant restaurant = dataSnapshot.child(passedArg).getValue(Restaurant.class);
resName.setText(restaurant.getName());
resPrice.setText(restaurant.getPrice());
resType.setText(restaurant.getType());
Picasso.get().load(restaurant.getImg()).into(resLogo);
resRating.setText(restaurant.getRating().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void loadItemList(String passedArg) {
FirebaseRecyclerOptions<Item> options =
new FirebaseRecyclerOptions.Builder<Item>()
.setQuery(itemTable.orderByChild("resid").equalTo(passedArg), Item.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Item, ItemViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final ItemViewHolder holder1, int position, @NonNull final Item model) {
holder1.itemName.setText(model.getName());
//Picasso.get().load(model.getImg()).into(holder.resLogo);
holder1.itemPrice.setText(model.getPrice());
holder1.itemType.setText(model.getCourse());
holder1.itemRating.setText(model.getRating());
if(model.getType().equals("nveg"))
{
holder1.itemLogo.setImageResource(R.drawable.icon_non_veg);
//Picasso.get().load("http://i.imgur.com/DvpvklR.png").resize(20,20).into(holder1.itemLogo);
}
final Item clickItem = model;
holder1.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Toast.makeText(RestaurantActivity.this, ""+clickItem.getName(), Toast.LENGTH_SHORT).show();
}
});
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_cardview, parent, false);
return new ItemViewHolder(view);
}
};
adapter.startListening();
recyclerItemList.setAdapter(adapter);
}
}
ViewHolder для HomeActivity
package com.example.foodsetgo.ViewHolder;
public class MenuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView resName, resPrice, resType, resRating;
public ImageView resLogo;
private ItemClickListener itemClickListener;
public MenuViewHolder(@NonNull View itemView) {
super(itemView);
resName = itemView.findViewById(R.id.res_name);
resPrice = itemView.findViewById(R.id.res_price);
resType = itemView.findViewById(R.id.res_type);
resLogo = itemView.findViewById(R.id.res_logo);
resRating = itemView.findViewById(R.id.res_rating);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.onClick(v, getAdapterPosition(), false);
}
}
ViewHolder для RestaurantActivity
package com.example.foodsetgo.ViewHolder;
public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView itemName, itemPrice, itemType, itemRating;
public ImageView itemLogo;
private ItemClickListener itemClickListener;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
itemName = itemView.findViewById(R.id.item_name);
itemPrice = itemView.findViewById(R.id.item_price);
itemType = itemView.findViewById(R.id.item_type);
itemLogo = itemView.findViewById(R.id.item_logo);
itemRating = itemView.findViewById(R.id.item_rating);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.onClick(v, getAdapterPosition(), false);
}
}
изображение на главном экране
Меню ресторана при первом нажатии
Меню ресторана при втором щелчке
* Recycler View в HomeActivity работает отлично, но Recycler View в RestaurantActivity работает в два клика (с промежуточным нажатием).