Java 我可以有一个加载不同数据集的recycleview吗
我正在开发一款用于书籍的移动应用程序 我有一个recyclerview,它有所有的分类——浪漫、历史等。这辆RV是从Firebase获取数据的 我想做的是: 例如,当用户点击浪漫时,需要打开一个新的活动。在该活动中,我希望有一个RV加载该类型的所有书籍的数据集 然后,如果用户打开历史记录,我希望将该数据集加载到同一RV中 我想避免代码重复,我想问的是-我能不能有一个带有If语句的类来处理用户选择并将数据集加载到一个RV中 如果可能的话,你能告诉我怎么做吗 谢谢大家! 编辑:这是我的代码。到目前为止,我做的是Adapter,GetAndSet类,2个活动。要将类别显示到一个RV中,我使用1个适配器和1个GetAndSet类,1个XML文件。我为浪漫和喜剧创建了两个独立的类,其中我与firebase建立了连接。 适配器: 公共类CategoriesAdapter扩展了RecyclerView.Adapter{Java 我可以有一个加载不同数据集的recycleview吗,java,android,Java,Android,我正在开发一款用于书籍的移动应用程序 我有一个recyclerview,它有所有的分类——浪漫、历史等。这辆RV是从Firebase获取数据的 我想做的是: 例如,当用户点击浪漫时,需要打开一个新的活动。在该活动中,我希望有一个RV加载该类型的所有书籍的数据集 然后,如果用户打开历史记录,我希望将该数据集加载到同一RV中 我想避免代码重复,我想问的是-我能不能有一个带有If语句的类来处理用户选择并将数据集加载到一个RV中 如果可能的话,你能告诉我怎么做吗 谢谢大家! 编辑:这是我的代码。到目前为
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();