RecyclerView не заполняется в один go. Принимая два клика - PullRequest
0 голосов
/ 05 марта 2020

Я делаю 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 работает в два клика (с промежуточным нажатием).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...