【问题标题】: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);

        }
    });
}

【问题讨论】:

标签: android


【解决方案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,因此在转换过程中会产生大量垃圾对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2014-09-17
      • 2018-06-10
      相关资源
      最近更新 更多