如何将数据从一项活动传递到多项活动?
Posted
技术标签:
【中文标题】如何将数据从一项活动传递到多项活动?【英文标题】:How I can passing data from one activity to multiple activities? 【发布时间】:2019-10-08 08:03:33 【问题描述】:我想将这些数据从当前活动发送到更多“BusInformationsCard”活动。
@覆盖 public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int position)
viewHolder.busLineName.setText(tickets.get(position).getBusLine());
viewHolder.seatsNumbers.setText(String.valueOf(tickets.get(position).getSeatNum()));
viewHolder.leavingTime.setText(tickets.get(position).getLeavingTime());
viewHolder.companyName.setText(tickets.get(position).getLeavingTime());
viewHolder.cardView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// here passing data to BusInformationCard
Intent ticketInfo = new Intent(mContext, BusInformationsCard.class);
ticketInfo.putExtra("busLine", tickets.get(position).getBusLine());
ticketInfo.putExtra("companyName", tickets.get(position).getCompany());
ticketInfo.putExtra("driverName", tickets.get(position).getName());
ticketInfo.putExtra("driverPhone", tickets.get(position).getDriverPhone());
ticketInfo.putExtra("seatNum", tickets.get(position).getSeatNum());
ticketInfo.putExtra("leavingTime", tickets.get(position).getLeavingTime());
ticketInfo.putExtra("latitude", tickets.get(position).getLatitude());
ticketInfo.putExtra("longitude", tickets.get(position).getLongitude());
mContext.startActivity(ticketInfo);
);
【问题讨论】:
How do I pass data between Activities in android application?的可能重复 【参考方案1】:您可以使用共享偏好在整个项目中使用您的数据。您只需要像这样创建一个 App Preference 类:-
public class AppPrefrences
private static SharedPreferences mPrefs;
private static SharedPreferences.Editor mPrefsEditor;
public static boolean isUserLoggedOut(Context ctx)
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
return mPrefs.getBoolean("id_logged_in", true);
public static void setUserLoggedOut(Context ctx, Boolean value)
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
mPrefsEditor = mPrefs.edit();
mPrefsEditor.putBoolean("id_logged_in", value);
mPrefsEditor.commit();
public static String getUserName(Context ctx)
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
return mPrefs.getString("userName", "");
public static void setUserName(Context ctx, String value)
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
mPrefsEditor = mPrefs.edit();
mPrefsEditor.putString("userName", value);
mPrefsEditor.commit();
public static void clearAllPreferences(Context ctx)
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
mPrefsEditor = mPrefs.edit();
mPrefsEditor.clear();
mPrefsEditor.commit();
现在只需调用这些方法来保存数据并获取保存的数据。 创建自己的方法来保存数据并获取保存的数据
【讨论】:
如果您有任何疑问,请发表评论 嘿@Sandeep 答案很好,但我有一个疑问。如果我们进行特定活动时数据已更改怎么办?我们仍然得到从 sharePrefernce 中获得的旧数据,对吧? 当数据改变时,你必须同时改变你的偏好数据,否则它总是会返回你之前存储的旧数据 是的,所以我们需要在其他活动中添加这个set和get方法来检查数据是否已经更新对不对? @Sandeep 我已经看到你的答案了。你写得很好,每个人都能理解@Sandeep。继续.!!!!【参考方案2】:您可以使用 Intent 的 getExtra 方法
将数据从一个活动获取到另一个这里是例子::
Example
String name;
name = getIntent().getStringExtra("driverName");
【讨论】:
【参考方案3】:如果您希望传递完整的ticket
对象,您可以在Java 中使用Serializable 或Parcelable 类。
这些类可帮助您将对象转换为可在活动之间传输的形式。
在 Serializable 的情况下,您需要做的就是扩展您的票证类别
public class Ticket extends Serializable
在 Parcelable 的情况下,您需要添加更多代码(在 Java 的情况下)。
public class Ticket extends Parcelable
public void writeToParcel(Parcel dest, int flags)
dest.writeString(name);
dest.writeString(busLine);
// Similarly for all the other parameters.
public static final Parcelable.Creator CREATOR = new Parcelable.Creator()
public Ticket createFromParcel(Parcel in)
return new Ticket(in);
public Ticket[] newArray(int size)
return new Ticket[size];
;
在这两种情况下,现在您可以像 intent.putExtra("ticket", ticket);
一样直接在 Intent 中传递您的完整票证对象,如果您已扩展 Parcelable,则可以在 Ticket ticket = getIntent().getSerializableExtra("ticket")
*/ getParcelable */
等其他活动中接收它。
Parcelable 和 Serializable 的主要区别在于速度差异,Parcelable 比 Serializable 快。此外,parcelable 是可定制的,因此开发人员可以独立处理他们的数据。 Serializable 也使用了 Java 反射 API,因此在转换过程中会产生大量垃圾对象。
【讨论】:
以上是关于如何将数据从一项活动传递到多项活动?的主要内容,如果未能解决你的问题,请参考以下文章