问题描述
我正在制作一个名为MotoDescriptive的应用程序,您可以在其中搜索有关特定摩托车的信息。但是问题在于,我无法将Room Room(MotoEntity)数组发送到另一个活动,以便从我单击的项目中获取数据。
这是我用来展示摩托车回收视图的片段:
package com.example.motodescriptive;
import android.content.Intent;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SearchView;
import java.util.ArrayList;
public class RecFragment extends Fragment implements MotorAdapter.OnNoteClicked {
private ArrayList<MotoEntity>motorcycle;
private RecyclerView recyclerView;
private MotorAdapter adapter;
private SearchView searchView;
MotoEntity motoEntity,motoEntity2,motoEntity3,motoEntity4,motoEntity5;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_rec,container,false);
recyclerView = v.findViewById(R.id.recyclerView);
searchView = v.findViewById(R.id.search_bar);
motoEntity = new MotoEntity();
motoEntity.setMoto_name("Aprilia dorsoduro 750");
motoEntity.setMoto_desc("test");
motoEntity.setMoto_img("https://upload.wikimedia.org/wikipedia/commons/c/c8/Aprilia_SMV750_Dorsoduro.jpg");
motoEntity2 = new MotoEntity();
motoEntity2.setMoto_name("Yamaha YZF R125");
motoEntity2.setMoto_desc("this is awesome");
motoEntity2.setMoto_img("https://motosvet.com/tabla/uploads/monthly_2019_06/large.yamaha_yzf_r125.jpg.1c366691f4ec323971ed7ffabf931e1e.jpg");
motoEntity3 = new MotoEntity();
motoEntity3.setMoto_name("KTM duke 125");
motoEntity3.setMoto_desc("this is awesoasssme");
motoEntity3.setMoto_img("https://bd.gaadicdn.com/processedimages/ktm/125-duke/source/125-duke5ecdf3eee8762.jpg?tr=w-360");
motoEntity4 = new MotoEntity();
motoEntity4.setMoto_name("suzuki");
motoEntity4.setMoto_desc("test teste");
motoEntity4.setMoto_img("https://prod-suzuki.azureedge.net/media/13851/jimnytransparent.png?anchor=center&mode=crop&rnd=132255608430000000");
motoEntity5 = new MotoEntity();
motoEntity5.setMoto_name("tomos ");
motoEntity5.setMoto_desc("tasasss is awesoasssme");
motoEntity5.setMoto_img("https://www.kolo.si/wp-content/uploads/2016/03/MOPED-TOMOS-FLEXER.ZELEN_.jpg");
MainActivity.appDatabase.motoDao().insert(motoEntity);
MainActivity.appDatabase.motoDao().insert(motoEntity2);
MainActivity.appDatabase.motoDao().insert(motoEntity3);
MainActivity.appDatabase.motoDao().insert(motoEntity4);
MainActivity.appDatabase.motoDao().insert(motoEntity5);
motorcycle = new ArrayList<>();
motorcycle.add(motoEntity);
motorcycle.add(motoEntity2);
motorcycle.add(motoEntity3);
motorcycle.add(motoEntity4);
motorcycle.add(motoEntity5);
adapter = new MotorAdapter(motorcycle,this,getContext());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new linearlayoutmanager(getContext()));
searchView.setonQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
adapter.getFilter().filter(s);
return false;
}
});
return v;
}
@Override
public void OnNote(Bundle bundle) {
Intent intent = new Intent(getContext(),Fragments.class);
intent.putExtras(bundle);
startActivity(intent);
}
}
这是我的那个回收站视图的适配器
package com.example.motodescriptive;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.List;
public class MotorAdapter extends RecyclerView.Adapter<MotorAdapter.ViewHolder> implements Filterable {
private ArrayList<MotoEntity> arr;
private ArrayList<MotoEntity> arrFull;
private OnNoteClicked onNoteClicked;
private Context context;
public MotorAdapter(ArrayList<MotoEntity> motorcycles,OnNoteClicked onNoteClicked,Context context) {
this.arr = motorcycles;
this.arrFull = new ArrayList<>(arr);
this.onNoteClicked = onNoteClicked;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.motocycles,parent,false);
return new ViewHolder(v,onNoteClicked);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
holder.text1.setText(arr.get(position).getMoto_name());
holder.text2.setText(arr.get(position).getMoto_desc());
Glide.with(context).load(arr.get(position).getMoto_img()).into(holder.image1);
}
@Override
public int getItemCount() {
return arr.size();
}
@Override
public Filter getFilter() {
return ExampleFilter;
}
Filter ExampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
ArrayList<MotoEntity> filteredList = new ArrayList<>();
if(charSequence == null || charSequence.length() == 0) {
filteredList.addAll(arrFull);
} else {
String filteredPattern = charSequence.toString().toLowerCase().trim();
for(MotoEntity item: arrFull) {
if(item.getMoto_name().toLowerCase().startsWith(filteredPattern)) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence charSequence,FilterResults filterResults) {
arr.clear();
arr.addAll((List) filterResults.values);
notifyDataSetChanged();
}
};
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView text1;
private TextView text2;
private ImageView image1;
private CardView cardView;
OnNoteClicked onNoteClicked;
public ViewHolder(@NonNull View itemView,OnNoteClicked onNoteClicked) {
super(itemView);
text1 = itemView.findViewById(R.id.text1);
text2 = itemView.findViewById(R.id.text2);
image1 = itemView.findViewById(R.id.image1);
cardView = itemView.findViewById(R.id.cardView);
this.onNoteClicked = onNoteClicked;
cardView.setonClickListener(this);
}
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("id",getAdapterPosition());
onNoteClicked.OnNote(bundle);
}
}
public interface OnNoteClicked {
void OnNote(Bundle bundle);
}
}
我的问题在这里:
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("id",getAdapterPosition());
onNoteClicked.OnNote(bundle);
}
}
如何将MotoEntities的数组列表发送到另一个活动?
解决方法
首先,使MotoEntity
实现Serializable
,然后可以传递列表。
Bundle bundle = new Bundle();
bundle.putSerializable();