简体   繁体   English

将数据对象从另一个活动传递到一个活动(片段->其活动->新活动)

[英]Pass data object to an Activity from another activity (Fragment -> its Activity-> new Activity)

I have created listFragment class called "EventFragment" and i need to pass data object on its click event to pass drawerActivity class (fragment class) and then i need to pass that object to another activity called EventDisplayActivity class. 我已经创建了名为“ EventFragment”的listFragment类,并且需要在其click事件上传递数据对象以传递抽屉活动类(片段类),然后我需要将该对象传递给另一个名为EventDisplayActivity类的活动。 I could manage get data object to the drawerActivity class but i cant send that to the EventDisplayActivity class. 我可以将get数据对象管理到抽屉活动类,但不能将其发送到EventDisplayActivity类。

//DrawerActivity code
@Override
public void OnEventItemClick(ZEvent zEventObject) {

    Log.i("URI uri", ""+zEventObject.getEventName());

    zEventItem = (ZEvent)zEventObject;
    Bundle b = new Bundle();
    b.putParcelable("EVENT_ITEM", zEventItem);

    Intent i = new Intent(DrawerActivity.this, EventDisplayActivity.class);
    i.putExtra("DUMMY","dummytext");
    i.putExtras(b);
    startActivity(i);   

}

// EventDisplayActivity

@Override
protected void onInit(ModelBase... data) {

    System.out.println("onInit() Called in Event Display Activity");

    SharedPreferences sessionkey = getApplicationContext().getSharedPreferences("session_detail", Context.MODE_PRIVATE);        
    session_token = sessionkey.getString("session", "");
    logged_user_type = sessionkey.getString("user_type", ""); 
    logged_user_id = sessionkey.getString("user_id", "");

    Intent i = getIntent();
    Bundle extras = i.getExtras();
    ZEvent zEventbundle = extras.getParcelable("EVENT_ITEM"); 


    mProposalId = zEventbundle.getProposalID();
    String mDummy = getIntent().getStringExtra("DUMMY");      

    Log.i("id>>>",""+mProposalId +"Dummy"+mDummy);

    params = new RequestParams();
    params.put("token", session_token);
    params.put("proposal_id", mProposalId);

mApiClient.getView(eventViewURL, params, eventResponse);

}    

//LOgCat

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{gg.zing/gg.zin.zing.events.activities.EventDisplayActivity}: java.lang.NullPointerException

Caused by: java.lang.NullPointerException
at gg.zin.zing.events.activities.EventDisplayActivity.onInit(EventDisplayActivity.java:431)

I assume your ZEvent implements Parcelable... If it does, then put in in the intent using putExtra (instead of creating new Bundle and using putExtras), and extract the same way using getParcelableExtra. 我假设您的ZEvent实现了Parcelable ...如果这样做,则使用putExtra(而不是创建新的Bundle和使用putExtras)放入意图中,并使用getParcelableExtra提取相同的方法。

 // Put final Intent intent = new Intent(context, <class>); intent.putExtra("MY_EVENT", obj); // <-- Should be parcelable 
// Get.
ZEvent obj = intent.getParcelableExtra("MY_EVENT");

You can also define a static attribute in a class which is used to hold the data in static fields. 您还可以在用于将数据保存在静态字段中的类中定义静态属性。

public class AppData{
    public static String user = "Ben";
}

You can use it like this: 您可以像这样使用它:

public void setUser(String user){
    AppData.user = user;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM