[英]How to add new data from second activity that doesn't exist in first activity android studio?
I have the following data in my Main Activity: Place Image, Place Name, and Place Location.我的主要活动中有以下数据:地点图像、地点名称和地点位置。 I want to add the Description and Gallery in the Second Activity, but I don't have the data to pass from Main to Second Activity.我想在第二个活动中添加描述和画廊,但我没有从主要活动传递到第二个活动的数据。 How to do this?这该怎么做? Is it possible to achieve?有可能实现吗?
Here's my Main Activity这是我的主要活动
public class MainActivity extends AppCompatActivity {
RecyclerView mainRecycler, mpRecycler;
MainAdapter mainAdapter;
MpAdapter mpAdapter;
EditText searchView;
CharSequence search="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchView = findViewById(R.id.search);
mainRecycler = findViewById(R.id.main_recycler);
mpRecycler = findViewById(R.id.mp_recycler);
mainRecycler();
mpRecycler();
}
private void mainRecycler() {
mainRecycler.setHasFixedSize(true);
mainRecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
final ArrayList<MainHelperClass> mainLocations = new ArrayList<>();
mainLocations.add(new MainHelperClass(R.drawable.image1, "Place Name 1", "Loc 1"));
mainLocations.add(new MainHelperClass(R.drawable.image2, "Place Name 2", "Loc 2"));
mainLocations.add(new MainHelperClass(R.drawable.image3, "Place Name 3", "Loc 3"));
mainAdapter = new MainAdapter(mainLocations, getApplicationContext());
mainRecycler.setAdapter(mainAdapter);
searchView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
mainAdapter.getFilter().filter(charSequence);
search = charSequence;
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private void mpRecycler() {
mpRecycler.setHasFixedSize(true);
mpRecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
ArrayList<MpHelperClass> mpLocations = new ArrayList<>();
mpLocations.add(new MpHelperClass(R.drawable.image1, "Place Name 1", "Loc 1"));
mpLocations.add(new MpHelperClass(R.drawable.image2, "Place Name 2", "Loc 2"));
mpLocations.add(new MpHelperClass(R.drawable.image3, "Place Name 3", "Loc 3"));
mpAdapter = new MpAdapter(mpLocations, getApplicationContext());
mpRecycler.setAdapter(mpAdapter);
}
public void onClick(View view) {
Intent intent = new Intent(this, MainDetails.class);
startActivity(intent);
}
}
Here's my Adapter这是我的适配器
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> implements Filterable {
ArrayList<MainHelperClass> mainLocations;
ArrayList<MainHelperClass> filteredMainLocations;
Context context;
public MainAdapter(ArrayList<MainHelperClass> mainLocations, Context context) {
this.mainLocations = mainLocations;
this.context = context;
this.filteredMainLocations = mainLocations;
}
@NonNull
@Override
public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_card_design,parent,false);
MainViewHolder mainViewHolder = new MainViewHolder(view);
return mainViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {
final MainHelperClass mainHelperClass = filteredMainLocations.get(position);
holder.image.setImageResource(mainHelperClass.getImage());
holder.placeName.setText(mainHelperClass.getPlaceName());
holder.location.setText(mainHelperClass.getLocation());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MainDetails.class);
intent.putExtra("image", mainHelperClass.getImage());
intent.putExtra("place name", mainHelperClass.getPlaceName());
intent.putExtra("location", mainHelperClass.getLocation());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return filteredMainLocations.size();
}
public static class MainViewHolder extends RecyclerView.ViewHolder{
ImageView image;
TextView placeName, location;
public MainViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.main_image);
placeName = itemView.findViewById(R.id.main_place_name);
location = itemView.findViewById(R.id.main_location);
}
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String key = charSequence.toString();
if (key.isEmpty()) {
filteredMainLocations = mainLocations;
}else {
ArrayList<MainHelperClass> isFiltered = new ArrayList<>();
for (MainHelperClass row : mainLocations) {
if (row.getPlaceName().toLowerCase().contains(key.toLowerCase())) {
isFiltered.add(row);
}
}
filteredMainLocations = isFiltered;
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredMainLocations;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults filterResults) {
filteredMainLocations = (ArrayList<MainHelperClass>)
filterResults.values;
notifyDataSetChanged();
}
};
}
}
Here's my Second Activity这是我的第二个活动
public class MainDetails extends AppCompatActivity {
ImageView image;
TextView placeName, location;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_details);
image = (ImageView)findViewById(R.id.main_image_details);
placeName = (TextView)findViewById(R.id.main_place_name_details);
location = (TextView)findViewById(R.id.main_loc_details);
image.setImageResource(getIntent().getIntExtra("image", 0));
placeName.setText(getIntent().getStringExtra("place name"));
location.setText(getIntent().getStringExtra("location"));
}
}
Use bundle to pass data to the second activity.使用 bundle 将数据传递给第二个活动。 First, When you want to start your second activity write this:首先,当你想开始你的第二个活动时,写这个:
Intent intent = new Intent(context, MainDetails.class);
intent.putExtra("mylist", mainLocations);
startActivity(intent);
Then, In MainDetails class get your bundle:然后,在 MainDetails class 中获取您的包:
ArrayList< MainHelperClass > myList = (ArrayList< MainHelperClass >)getIntent().getSerializableExtra("mylist");
*Don't forget to implement Serializable in your MainHelperClass class. *不要忘记在 MainHelperClass class 中实现 Serializable。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.