Java 我可以有一个加载不同数据集的recycleview吗

Java 我可以有一个加载不同数据集的recycleview吗,java,android,Java,Android,我正在开发一款用于书籍的移动应用程序 我有一个recyclerview,它有所有的分类——浪漫、历史等。这辆RV是从Firebase获取数据的 我想做的是: 例如,当用户点击浪漫时,需要打开一个新的活动。在该活动中,我希望有一个RV加载该类型的所有书籍的数据集 然后,如果用户打开历史记录,我希望将该数据集加载到同一RV中 我想避免代码重复,我想问的是-我能不能有一个带有If语句的类来处理用户选择并将数据集加载到一个RV中 如果可能的话,你能告诉我怎么做吗 谢谢大家! 编辑:这是我的代码。到目前为

我正在开发一款用于书籍的移动应用程序

我有一个recyclerview,它有所有的分类——浪漫、历史等。这辆RV是从Firebase获取数据的

我想做的是:

例如,当用户点击浪漫时,需要打开一个新的活动。在该活动中,我希望有一个RV加载该类型的所有书籍的数据集

然后,如果用户打开历史记录,我希望将该数据集加载到同一RV中

我想避免代码重复,我想问的是-我能不能有一个带有If语句的类来处理用户选择并将数据集加载到一个RV中

如果可能的话,你能告诉我怎么做吗

谢谢大家!

编辑:这是我的代码。到目前为止,我做的是Adapter,GetAndSet类,2个活动。要将类别显示到一个RV中,我使用1个适配器和1个GetAndSet类,1个XML文件。我为浪漫和喜剧创建了两个独立的类,其中我与firebase建立了连接。 适配器:

公共类CategoriesAdapter扩展了RecyclerView.Adapter{

Context mContext;
List<Categories> mData;

public CategoriesAdapter(Context mContext, List<Categories> mData) {
    this.mContext = mContext;
    this.mData = mData;
}


@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View row = LayoutInflater.from( mContext ).inflate( R.layout.row_attractions, parent, false );

    return new MyViewHolder( row );
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

    holder.DesName.setText( mData.get( position ).getName() );
    Glide.with( mContext ).load( mData.get( position ).getImage() ).into( holder.DesImage );
}

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

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView DesName;
    ImageView DesImage;

    public MyViewHolder(@NonNull View itemView) {
        super( itemView );

        itemView.setClickable( true );
        mContext = itemView.getContext();

        DesName = itemView.findViewById( R.id.DesName );
        DesImage = itemView.findViewById( R.id.DesImage );
        DesImage.setOnClickListener( this );
    }


    @Override
    public void onClick(View v) {

        final Intent intent;
        Toast.makeText(itemView.getContext(),"Test",Toast.LENGTH_LONG ).show();
        switch (getAdapterPosition()) {
            case 0:
                intent = new Intent( mContext, Romance.class );
                break;

             case 1:
                intent = new Intent( mContext, Comedy.class );
              break;

            // case 2:
            //     intent = new Intent( mContext, RegentsPark.class );
            //  break;

            default:
                intent = new Intent( mContext, Home.class );
                break;
        }
        mContext.startActivity( intent );
    }

}
Context-mContext;
列出mData;
公共类别适配器(上下文mContext、列表mData){
this.mContext=mContext;
this.mData=mData;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View row=LayoutFlater.from(mContext)。充气(R.layout.row\u,父项,false);
返回新的MyViewHolder(行);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
holder.DesName.setText(mData.get(position.getName());
将(mData.get(position.getImage())加载到(holder.DesImage)中;
}
@凌驾
public int getItemCount(){
返回mData.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图名称;
图像视图设计;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
itemView.setClickable(真);
mContext=itemView.getContext();
DesName=itemView.findviewbyd(R.id.DesName);
DesImage=itemView.findviewbyd(R.id.DesImage);
DesImage.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
最终意图;
Toast.makeText(itemView.getContext(),“Test”,Toast.LENGTH_LONG.show();
开关(getAdapterPosition()){
案例0:
意向=新意向(mContext,roman.class);
打破
案例1:
意图=新意图(mContext,喜剧类);
打破
//案例2:
//意图=新意图(mContext,RegentsPark.class);
//中断;
违约:
意图=新意图(mContext,Home.class);
打破
}
mContext.startActivity(意图);
}
}
}

浪漫类(与喜剧类相同,除了我引用数据集的Firebase行:

public class Romance extends AppCompatActivity {


RecyclerView categoriesRecyclerView ;
CategoriesAdapter categoriesAdapter  ;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference ;
List<Categories> categoriesList;

private EditText mSearchField;
private ImageButton mSearchBtn;

private RecyclerView mResultList;

private DatabaseReference mUserDatabase;

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


    categoriesRecyclerView  = findViewById(R.id.BookRV);
    categoriesRecyclerView.setLayoutManager(new LinearLayoutManager(Romance.this));
    categoriesRecyclerView.setHasFixedSize(true);
    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = firebaseDatabase.getReference("ListParks");

   // mUserDatabase = FirebaseDatabase.getInstance().getReference("Categories");


    mSearchField = (EditText) findViewById(R.id.search_field);
    mSearchBtn = (ImageButton) findViewById(R.id.search_btn);

    mResultList = (RecyclerView) findViewById(R.id.result_list);
    mResultList.setHasFixedSize(true);
    mResultList.setLayoutManager(new LinearLayoutManager(this));

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

            String searchText = mSearchField.getText().toString();

            firebaseUserSearch(searchText);

        }
    });

}

private void firebaseUserSearch(String searchText) {

    Toast.makeText(Romance.this, "Started Search", Toast.LENGTH_LONG).show();

    Query firebaseSearchQuery = mUserDatabase.orderByChild("name").startAt(searchText).endAt(searchText + "\uf8ff");

    FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(

            Users.class,
            R.layout.list_layout,
            UsersViewHolder.class,
            firebaseSearchQuery

    ) {
        @Override
        protected void populateViewHolder(UsersViewHolder viewHolder, Users model, int position) {


            viewHolder.setDetails(getApplicationContext(), model.getName(), model.getImage());

        }
    };

    mResultList.setAdapter(firebaseRecyclerAdapter);

}


// View Holder Class

public static class UsersViewHolder extends RecyclerView.ViewHolder {

    View mView;

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

        mView = itemView;

    }

    public void setDetails(Context ctx, String userName, String userImage){

        TextView user_name = (TextView) mView.findViewById(R.id.name_text);
        ImageView user_image = (ImageView) mView.findViewById(R.id.profile_image);


        user_name.setText(userName);

        Glide.with(ctx).load(userImage).into(user_image);


    }




}

@Override
protected void onStart() {
    super.onStart();


    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            categoriesList = new ArrayList<>();
            for (DataSnapshot catsnap: dataSnapshot.getChildren()) {

                Categories post = catsnap.getValue(Categories.class);
                categoriesList.add(post) ;
            }
            //set Adapter
            categoriesAdapter = new CategoriesAdapter(Romance.this,categoriesList);
            categoriesRecyclerView.setAdapter(categoriesAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
}
公共类活动{
回收视图分类回收视图;
分类适应器分类适应器;
FirebaseDatabase FirebaseDatabase;
数据库参考数据库参考;
列表分类列表;
私有编辑文本字段;
专用图像按钮mSearchBtn;
私人回收站查看mResultList;
私人数据库参考博物馆数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_Romans);
categoriesRecyclerView=findViewById(R.id.BookRV);
categoriesRecyclServiceView.setLayoutManager(新的LinearLayoutManager(roman.this));
categoriesRecyclerView.setHasFixedSize(true);
firebaseDatabase=firebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference(“ListParks”);
//mUserDatabase=FirebaseDatabase.getInstance().getReference(“类别”);
mSearchField=(EditText)findViewById(R.id.search_字段);
mSearchBtn=(ImageButton)findViewById(R.id.search\u btn);
mResultList=(RecyclerView)findViewById(R.id.result\u list);
mResultList.setHasFixedSize(true);
mResultList.setLayoutManager(新的LinearLayoutManager(this));
mSearchBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
String searchText=mSearchField.getText().toString();
firebaseUserSearch(searchText);
}
});
}
私有void firebaseUserSearch(字符串搜索文本){
Toast.makeText(roman.this,“开始搜索”,Toast.LENGTH_LONG.show();
Query firebaseSearchQuery=mUserDatabase.orderByChild(“名称”).startAt(searchText).endAt(searchText+“\uf8ff”);
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(
用户.class,
R.layout.list_布局,
UsersViewHolder.class,
firebaseSearchQuery
) {
@凌驾
受保护的void populateViewHolder(UsersViewHolder、Users模型、int位置){
viewHolder.setDetails(getApplicationContext()、model.getName()、model.getImage());
}
};
mResultList.setAdapter(firebaseRecyclerAdapter);
}
//视图持有者类
公共静态类UsersViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共用户查看文件夹(查看项目视图){
超级(项目视图);
mView=项目视图;
}
public void setDetails(上下文ctx、字符串用户名、字符串用户图像){
TextView用户名=(TextView)mView.findviewbyd(R.id.name\u text);
ImageView用户_image=(ImageView)mView.findViewById(R.id.profile_image);
user_name.setText(用户名);
使用(ctx)滑动。加载(userImage)。放入(user\u image);
}
}
@凌驾
受保护的void onStart(){
super.onStart();
databaseReference.addValueEventListener(新的ValueEventListener(){
@越过
public MyAdapter(String[] myDataset) {
    mDataset = myDataset;
}
MyAdapter myAdapter = new MyAdapter(myDataset);
recyclerView.setAdapter(myAdapter);
MyAdapter myAdapter = new MyAdapter(myDataset);
recyclerView.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();

myAdapter.notifyDataSetChanged();