首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用MultiViews实现水平Firebase RecyclerView

尝试使用MultiViews实现水平Firebase RecyclerView
EN

Stack Overflow用户
提问于 2019-08-04 08:28:58
回答 2查看 256关注 0票数 0

我正在尝试一个FireBase水平RecyclerView (类似于Netflix的克隆)。

我看过Git和Android阿森纳,找到了类似的编程,但没有成功地找到任何有firebase后端的东西。我使用过适配器和数据库。我已经在这个问题上工作了几天,但没有找到解决方案。

代码语言:javascript
复制
public class RestaurantList extends AppCompatActivity {

    RecyclerView recyclerView1;
    RecyclerView recyclerView2;


    FirebaseRecyclerOptions<Restaurant> options = new FirebaseRecyclerOptions.Builder<Restaurant>()
            .setQuery(FirebaseDatabase.getInstance()
                            .getReference()
                            .child("Restaurants1")
                    ,Restaurant.class)
            .build();

    FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder> adapter = new FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder>(options) {

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

        @Override
        protected void onBindViewHolder(@NonNull  RestaurantViewHolder viewHolder, int position, @NonNull Restaurant model) {

            viewHolder.txt_restaurant_name.setText(model.getName());
            Picasso.get().load(model.getImage())
                    .into(viewHolder.img_restaurant);
            final Restaurant clickItem = model;
            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    Intent foodList = new Intent(RestaurantList.this, Home.class);
                    Common.restaurantSelected=adapter.getRef(position).getKey();
                    startActivity(foodList);
                }
            });

        }

    };

    FirebaseRecyclerOptions<Restaurant> options2 = new FirebaseRecyclerOptions.Builder<Restaurant>()
            .setQuery(FirebaseDatabase.getInstance()
                            .getReference()
                            .child("Restaurants2")
                    ,Restaurant.class)
            .build();

    FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder> adapter2= new FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder>(options2) {


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

        @Override
        protected void onBindViewHolder(@NonNull  RestaurantViewHolder viewHolder, int position, @NonNull Restaurant model) {

            viewHolder.txt_restaurant_name.setText(model.getName());
            Picasso.get().load(model.getImage())
                    .into(viewHolder.img_restaurant);
            final Restaurant clickItem = model;
            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    Intent foodList = new Intent(RestaurantList.this, Home.class);
                    Common.restaurantSelected=adapter2.getRef(position).getKey();
                    startActivity(foodList);
                }
            });

        }


    };

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


        RelativeLayout relativeLayout = findViewById(R.id.root2_layout);
        AnimationDrawable animationDrawable = (AnimationDrawable)relativeLayout.getBackground();
        animationDrawable.setEnterFadeDuration(5);
        animationDrawable.setExitFadeDuration(1000);
        animationDrawable.start();

        LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
        LinearLayoutManager layoutManager2 = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);

        recyclerView1 = (RecyclerView) findViewById(R.id.recycler_restaurant);

        recyclerView1.setLayoutManager(layoutManager);

        recyclerView2 = (RecyclerView) findViewById(R.id.recycler_restaurant2);
        recyclerView1.setLayoutManager(layoutManager2);

        loadAsianFood();
        loadSteakHouse();

    }

    private void loadSteakHouse() {
        adapter.startListening();
        recyclerView1.setAdapter(adapter);
        recyclerView1.getAdapter().notifyDataSetChanged();
        recyclerView1.scheduleLayoutAnimation();
    }

    private void loadAsianFood() {
        adapter2.startListening(); // Did you mean adapter2.startListening()?
        recyclerView2.setAdapter(adapter2);
        recyclerView2.getAdapter().notifyDataSetChanged();
        recyclerView2.scheduleLayoutAnimation();
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
        adapter2.stopListening();;

    }
    @Override
    protected void onResume() {
        super.onResume();

        if (adapter != null)
            adapter.startListening();
        adapter2.startListening();

    }



}

它只运行第一个类别(Restaurant1)。

EN

回答 2

Stack Overflow用户

发布于 2019-08-05 10:19:49

我注意到了一些问题,尽管我不知道它们是否能解决你的实际问题。

1-您正在第一个适配器上调用startListening,而它应该是第二个适配器:

代码语言:javascript
复制
private void loadAsianFood() {
    adapter.startListening(); // Did you mean adapter2.startListening()?
    recyclerView2.setAdapter(adapter2);
    recyclerView2.getAdapter().notifyDataSetChanged();
    recyclerView2.scheduleLayoutAnimation();

}

2-您只停止第一个适配器,而不停止第二个适配器。

代码语言:javascript
复制
@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();

}

3-您只恢复第一个适配器,而不是第二个适配器:

代码语言:javascript
复制
@Override
protected void onResume() {
    super.onResume();

    if (adapter != null)
        adapter.startListening();
}
票数 0
EN

Stack Overflow用户

发布于 2019-08-05 23:55:38

RecyclerView recyclerView1;RecyclerView recyclerView2;

代码语言:javascript
复制
FirebaseRecyclerOptions<Restaurant> options = new FirebaseRecyclerOptions.Builder<Restaurant>()
        .setQuery(FirebaseDatabase.getInstance()
                        .getReference("RestaurantCategory")
                        .child("01").child("SteakHouse")
                ,Restaurant.class)
        .build();

FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder> adapter = new FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder>(options) {

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

    @Override
    protected void onBindViewHolder(@NonNull  RestaurantViewHolder viewHolder, int position, @NonNull Restaurant model) {

        viewHolder.txt_restaurant_name.setText(model.getName());
        Picasso.get().load(model.getImage())
                .into(viewHolder.img_restaurant);
        final Restaurant clickItem = model;
        viewHolder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                Intent foodList = new Intent(RestaurantList.this, Home.class);
                Common.restaurantSelected=adapter.getRef(position).getKey();
                startActivity(foodList);
            }
        });

    }

};

FirebaseRecyclerOptions<Restaurant> options2 = new FirebaseRecyclerOptions.Builder<Restaurant>()
        .setQuery(FirebaseDatabase.getInstance()
                        .getReference("RestaurantCategory")
                        .child("02").child("AsianFood")
                ,Restaurant.class)
        .build();

FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder> adapter2= new FirebaseRecyclerAdapter<Restaurant, RestaurantViewHolder>(options2) {


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

    @Override
    protected void onBindViewHolder(@NonNull  RestaurantViewHolder viewHolder, int position, @NonNull Restaurant model) {

        viewHolder.txt_restaurant_name.setText(model.getName());
        Picasso.get().load(model.getImage())
                .into(viewHolder.img_restaurant);
        final Restaurant clickItem = model;
        viewHolder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                Intent foodList = new Intent(RestaurantList.this, Home.class);
                Common.restaurantSelected=adapter2.getRef(position).getKey();
                startActivity(foodList);
            }
        });

    }


};

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


    RelativeLayout relativeLayout = findViewById(R.id.root2_layout);
    AnimationDrawable animationDrawable = (AnimationDrawable)relativeLayout.getBackground();
    animationDrawable.setEnterFadeDuration(5);
    animationDrawable.setExitFadeDuration(1000);
    animationDrawable.start();

    LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    LinearLayoutManager layoutManager2 = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);

    recyclerView1 = (RecyclerView) findViewById(R.id.recycler_restaurant);

    recyclerView1.setLayoutManager(layoutManager);

    recyclerView2 = (RecyclerView) findViewById(R.id.recycler_restaurant2);
    recyclerView1.setLayoutManager(layoutManager2);

    loadAsianFood();
    loadSteakHouse();

}

private void loadSteakHouse() {
    adapter.startListening();
    recyclerView1.setAdapter(adapter);
    recyclerView1.getAdapter().notifyDataSetChanged();
    recyclerView1.scheduleLayoutAnimation();
}

private void loadAsianFood() {
    adapter2.startListening(); // Did you mean adapter2.startListening()?
    recyclerView2.setAdapter(adapter2);
    recyclerView2.getAdapter().notifyDataSetChanged();
    recyclerView2.scheduleLayoutAnimation();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
    adapter2.stopListening();;

}
@Override
protected void onResume() {
    super.onResume();

    if (adapter != null)
        adapter.startListening();
    adapter2.startListening();

}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57342979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档