如何将第一个活动的数据传递到第二个和第二个活动到第三个

时间:2018-05-08 11:46:59

标签: java android android-intent

注意:我知道如何将数据 Activity1 传递给 Activity2 使用Bundle和PutExtra

我在下面的链接中提到:

问题

我有3项活动,活动1 活动2 活动3

在活动1中,我有数据。当我点击数据活动2 时,

Activity2 中我是Textview。当我点击textView然后打开 Activity3

Activity3 中,我有EditText

所以我想传递数据活动1 活动2 活动2 < em> TO 活动3

活动1 代码:

private OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(Base item) {
            Company company = (Company) item;
            Intent intent = new Intent(getActivity(), CompanyDetailActivity.class);
            //intent.putExtra("company", company);
            //intent.putExtra("edit", "editFrag");
            intent.putExtra("company", item);
            startActivity(intent);
            Log.e("Item...","Item clicked "+company.getName());
        }
    };

活动2 代码:

case R.id.rlCompanyProfile:
            //Base item = null;
            Company company = (Company) getIntent().getExtras().getSerializable("company") ;
            Intent intent = new Intent(this, AddCompanyActivity.class);
            intent.putExtra("company", company);
            //intent.putExtra("company", myData);
            intent.putExtra("edit", "editFrag");
            startActivity(intent);
            break;

活动3 代码:

Intent extras1 = getIntent();
        {


                        Company value = (Company) extras1.getSerializableExtra("company");
                        etCompanyName.setText(value.getName());
                        etWebsite.setText(value.getWebsite());
                        etEmail.setText(value.getEmail());
                        etPhoneHome.setText(value.getPhoneHome());
                        etPhonePrimary.setText(value.getPhonePrimary());
                        etAddressLine1.setText(value.getAddressLine1());
                        etAddressLine2.setText(value.getAddressLine2());
                        etCity.setText(value.getCity());
                        etZip.setText(value.getZipcode());
                    }

5 个答案:

答案 0 :(得分:2)

问题出在这里Activity2代码检查

您正在传递item = null

Activity2代码:

case R.id.rlCompanyProfile:
Base item = null; // item object is null here
Company company = (Company) item ;// here you are passing null item object of your Company class
Intent intent = new Intent(this, AddCompanyActivity.class);
intent.putExtra("company", item);
intent.putExtra("edit", "editFrag");
startActivity(intent);
break;

修改

将数据发送到Activity使用此

intent.putExtra("company", company);

要接收第三项活动中的数据,请使用此

Company company=intent.getSerializableExtra("company");

答案 1 :(得分:1)

您可以使用intent或bundle传递数据。

您还可以使用共享首选项来存储和检索数据。 使用如下意图:

// send data
    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("detailData",data);
    startActivity(intent);
//retrieve data
    Intent intent = getIntent();
    String detailData = intent.getStringExtra("detailData");

使用捆绑

 //Create the bundle 
 Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("VENUE_NAME", venueName);
//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
//retrie bundle 
Bundle bundle = getIntent().getExtras();

//Extract the data…
String venName = bundle.getString("VENUE_NAME");

共享福利:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
    SharedPreferences.Editor editor = sharedpreferences.edit();
                editor.putString("key", value);
                editor.commit();
//retrieve data
pref.getString("key", null); // getting String

答案 2 :(得分:0)

您可以使用startActivityForResult()类的Activity方法实现此性质。

请参阅此链接startActivityForResult

答案 3 :(得分:0)

不是那么难,只需使用putExtra()以便在活动之间传递数据,工作流将是这样,首先使用putExtra()作为第一个意图转到第二个Activity,在你到达Activity 2后,使用bundle getExtras()获取结果,然后创建另一个intent.putExtra()以将该数据发送到Activity 3

工作流程应该是这样的

活动1

String myData = "StackOverflowRocks";

Intent intent = new Intent(getBaseContext(), Activity2.class);
intent.putExtra("THE_ID_OF_WHAT_YOU_ARE_SENDING", myData);
startActivity(intent);

活动2 只需获取该数据

 Bundle extras = getIntent().getExtras(); 
 String getData;

if (extras != null) {
    userName = extras.getString("THE_ID_OF_WHAT_YOU_ARE_SENDING");
    // and get whatever type user account id is
}

现在您已拥有活动2中的数据,请执行与活动1到活动2

相同的操作
String myData = getData;

Intent intent = new Intent(getBaseContext(), Activity3.class);
intent.putExtra("THE_ID_OF_WHAT_YOU_ARE_SENDING2", myData);
startActivity(intent);

并在活动3

中获取

你可以通过这种方式检查你的演员。

Bundle extras = getIntent().getExtras(); 
 String getData;

if (extras != null) {
    userName = extras.getString("THE_ID_OF_WHAT_YOU_ARE_SENDING2");
    // and get whatever type user account id is
}

编辑:您的问题是您将数据作为item1发送到您的活动2,但是在活动2中您没有获得该item1数据,您只是创建一个新的并将其发送到活动3。

在活动2中查看此内容

Intent intent = new Intent(this, AddCompanyActivity.class);
intent.putExtra("company", item1);
intent.putExtra("edit", "editFrag");

不是创建新的item1,而是从活动1中获取item1的数据:

String company = getIntent().getStringExtra("company");

答案 4 :(得分:0)

您可以使用sharedpreferance存储 Activity1 Activity2 的数据,以传入 Activity3