如何将数据从一个活动传递到多个活动?

时间:2019-05-21 21:23:54

标签: android

我想将这些数据从当前活动发送到更多的“ BusInformationsCard”活动。

@Override     public void onBindViewHolder(@NonNull ViewHolder viewHolder,最终int位置){

    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);

        }
    });
}

3 个答案:

答案 0 :(得分: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();
    }
        }

,现在只需调用这些方法即可保存数据并获取已保存的数据。 创建自己的保存数据的方法并获取保存的数据

答案 1 :(得分:0)

您可以使用 Intent的getExtra方法

,将数据从一种活动转移到另一种

这里是示例::

Example


String name;

name = getIntent().getStringExtra("driverName");

答案 2 :(得分:0)

如果您希望传递完整的 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); 一样直接在意图中传递完整的票证对象,并且可以在其他活动中接收它,例如 Ticket ticket = getIntent().getSerializableExtra("ticket") */ getParcelable */ 如果您有扩展 Parcelable。

Parcelable 和 Serializable 的主要区别在于速度的不同,Parcelable 比 Serializable 快。此外,parcelable 是可定制的,因此开发人员可以独立处理他们的数据。 Serializable 也使用了 Java Reflection API,因此在转换过程中最终会产生大量垃圾对象。