如何根据从Firebase数据库检索到的内容确定要显示的视图?

时间:2018-10-02 19:07:07

标签: android firebase firebase-realtime-database android-recyclerview

我想知道如何根据从Firebase数据库检索的内容来决定应显示哪种布局。就像我有一个名为Status的字符串是否需要一个名为layout_status的布局一样?

1 个答案:

答案 0 :(得分:0)

那是我的发现片段

private DatabaseReference mDatabaseRefAll;
private RecyclerView recyclerViewDiscover;
DiscoverRecyclerViewAdapter discoverRecyclerViewAdapter;
private ArrayList<Object> discoverItems = new ArrayList<>();
private ArrayList<Object> objects = new ArrayList<>();
private MainAdapter adapter;

public Discover() {
    // Required empty public constructor
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View view = inflater.inflate(R.layout.fragment_discover, container, false);

    recyclerViewDiscover = (RecyclerView) view.findViewById(R.id.rcDiscover);
    recyclerViewDiscover.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerViewDiscover.setHasFixedSize(true);


    discoverRecyclerViewAdapter = new DiscoverRecyclerViewAdapter(getContext(), discoverItems);
    // set adapter
    recyclerViewDiscover.setAdapter(discoverRecyclerViewAdapter);


    /*
    //recyclerViewDiscover.setLayoutManager(new LinearLayoutManager(getActivity())); */

    return view;

}

private void loadPost() {

    // loading the posts

    mDatabaseRefAll = FirebaseDatabase.getInstance().getReference("Testing");
    Query queryDiscover = mDatabaseRefAll;

    queryDiscover.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {

            Post post = dataSnapshot.getValue(Post.class);
            discoverItems.add(post);

            discoverRecyclerViewAdapter.notifyDataSetChanged();

            // recyclerViewDiscover.scrollToPosition( discoverItems.size() - 1);

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

我的Discover DiscoverRecyclerViewAdapter {

private Context ctx;
private ArrayList<Object> arrayListDiscoverContent;
private ArrayList<discoverModell> arraydiscoverRow;
private static final int LAYOUT_ADS = 1;
private static int LAYOUT_DISCOVERROW = 0;
private static int LAYOUT_DISCOVERCONTENT = 2;


public DiscoverRecyclerViewAdapter(Context context, ArrayList<Object> arrayListDiscoverContent) {

    this.ctx = context;
    this.arrayListDiscoverContent = arrayListDiscoverContent;
    //this.arraydiscoverRow = arraydiscoverRow;

}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    ctx = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(ctx);
    View view;
    RecyclerView.ViewHolder holder;

    switch (viewType) {
        case 0:
            view = inflater.inflate(R.layout.discover_by_content, parent, false);
            holder = new DiscoverViewHolder(view);
            break;

        case 1:
            view = inflater.inflate(R.layout.ad_banner_view, parent, false);
            holder = new AdViewHolder(view);
            break;

        default:
            view = inflater.inflate(R.layout.discover_by_content, parent, false);
            holder = new DiscoverViewHolder(view);
            break;
    }

    return holder;

}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    //String type = arrayListDiscoverContent.get(position).getType();

    String type = (String) arrayListDiscoverContent.get(position);

    if (holder instanceof DiscoverViewHolder ) {

        DiscoverViewHolder.obooks.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent booksIntent = new Intent(ctx, menu_book.class);
                ctx.startActivity(booksIntent);
            }
        });

        DiscoverViewHolder.olisticles.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent listIntent = new Intent(ctx, menu_listicle.class);
                ctx.startActivity(listIntent);
            }
        });

        DiscoverViewHolder.oinfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent odatingIntent = new Intent(ctx, Buildinginfo.class);
                ctx.startActivity(odatingIntent);
            }
        });

    } else if (holder instanceof AdViewHolder){

        DiscoverViewHolder.adsDiscoverView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(ctx, google_ads_video.class);
                ctx.startActivity(intent);
            }
        });

    } else if (holder instanceof DiscoverContentViewHolder) {

    }

}

public static class DiscoverViewHolder extends RecyclerView.ViewHolder {

    public static View adsDiscoverView, gotobannerview;
    public static Context ctx;
    public static TextView name_discover, autordiscover;
    public static ImageView obooks, olisticles, oinfo;

    public DiscoverViewHolder(View itemView) {
        super(itemView);

        this.ctx = ctx;
        gotobannerview = itemView;


        obooks = (ImageView) itemView.findViewById(R.id.obooks);
        olisticles = (ImageView) itemView.findViewById(R.id.olisticles);
        oinfo = (ImageView) itemView.findViewById(R.id.oinfo);

        name_discover = itemView.findViewById(R.id.textView19);
        autordiscover = itemView.findViewById(R.id.autorId);
    }
}

public static class DiscoverContentViewHolder extends RecyclerView.ViewHolder {

    public static Context ctx;
    public static View adsDiscoverView;
    public static ImageView obooks, olisticles, oinfo;

    public DiscoverContentViewHolder(View itemView) {
        super(itemView);

        this.ctx = ctx;

    }
}

public static class AdViewHolder extends RecyclerView.ViewHolder {

    AdView adView;
    Context context;

    public AdViewHolder(View itemView) {
        super(itemView);

        adView = itemView.findViewById(R.id.adView2);

    }
}

@Override
public int getItemCount() {
    return arrayListDiscoverContent.size();
}

@Override
public int getItemViewType(int position) {

    /*if (position == 0){
        return LAYOUT_DISCOVERROW;
    } else if (position == 1){
        return LAYOUT_ADS;
    }

    return LAYOUT_DISCOVERCONTENT;*/

    return position;
}

}