如何从两个不同的活动中检索数据并在另一个不同的活动中显示

时间:2017-05-31 08:11:25

标签: android android-intent

我究竟能从两个不同的(假设:A和B)活动中检索数据,我想在另一个活动(活动C)中显示。也许我可以这样绘制 - A和B包含应该用C显示的数据。就像那样简单。

但问题是当我从A接收数据后,我从B获取数据(这次我也从B接收数据)。来自A的数据丢失或者就像'重置'一样。当我从B接收数据并从A中获取数据时,也会出现此问题。

我正在使用以下代码:

活动A:我如何使用Intent发送数据

public static final String EXTRA_COUNTRY_SITE = "EXTRA_COUNTRY_SITE";
private static final int REQUEST_RESPONSE_SITE = 1;

class ItemLists implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        TextView tvs = (TextView)view.findViewById(R.id.textViewSiteName);
     // Lets say textview just like String "Data A"
        Intent intent = new Intent(view.getContext(), LoginActivityView.class);
        intent.putExtra(EXTRA_COUNTRY_SITE, tvs.getText().toString());
     // tvs.getText().toString() here you can change it to String
        startActivityForResult(intent, REQUEST_RESPONSE_SITE);
    }
}

活动B:这是我使用Intent发送数据的方式

public static final String EXTRA_COUNTRY_EMPLOYEE = "EXTRA_COUNTRY_EMPLOYEE";
private static final int REQUEST_RESPONSE_EMPLOYEE = 1;

class ItemListe implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        TextView tve = (TextView)view.findViewById(R.id.textViewEmpName);
     // Lets say textview just like String "Data B"
        Intent intent = new Intent(view.getContext(), LoginActivityView.class);
        intent.putExtra(EXTRA_COUNTRY_EMPLOYEE, tve.getText().toString());
     // tvs.getText().toString() here you can change it to String
        startActivityForResult(intent, REQUEST_RESPONSE_EMPLOYEE);
    }
}

活动C:我只想在EditText中显示

//此问题来自

    String country_emp = getIntent().getStringExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE);
    EditText editTextEmployee= (EditText) findViewById(R.id.editTextEmployee);
    editTextEmployee.setText(country_emp);

    String country_site = getIntent().getStringExtra(ViewSiteActivity.EXTRA_COUNTRY_SITE);
    EditText editTextSite= (EditText) findViewById(R.id.editTextSite);
    editTextSite.setText(country_site);

这就是我从活动C开始活动A和B的方式

    public void click(View v) {
    Intent intent = null;
    switch(v.getId()) {
        case R.id.editTextSite:
            intent = new Intent(this, ViewSiteActivity.class);
            break;
        case R.id.editTextEmployee:
            intent = new Intent(this, ViewEmployeeActivity.class);
    }
    startActivity(intent);
}

任何解决该问题的想法或传递数据的其他技巧。抱歉我的英语不好,我只是Android的初学者。

3 个答案:

答案 0 :(得分:0)

如果C仅从A接收B和B,则将从A接收的束添加到从B开始的C中的Intent

Activity B
...
intent.putExtras(receivingBundle):
...

如果您想从A或B启动活动C,  C只接收来自启动活动的数据。

答案 1 :(得分:0)

我理解为,你想要将数据从A传递给B,然后将A和B的数据传递给C.如果是这样,你必须将A和B数据从B发送到C.但是你要发送只有B数据,因为我可以看到代码。

在B活动点击事件中尝试此操作

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    TextView tve = (TextView)view.findViewById(R.id.textViewEmpName);
 // Lets say textview just like String "Data B"
    Intent intent = new Intent(view.getContext(), LoginActivityView.class);
    intent.putExtra(EXTRA_COUNTRY_EMPLOYEE, tve.getText().toString());
    intent.putExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE, getIntent().getStringExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE));
 // tvs.getText().toString() here you can change it to String
    startActivityForResult(intent, REQUEST_RESPONSE_EMPLOYEE);
}

如果我理解你的问题是错误的,请纠正我。

答案 2 :(得分:0)

您可以使用“共享首选项”存储数据并在以后使用它们, 这是示例

将数据存储在共享首选项中

1)在活动A中

SharedPreferences sharedpreferences;
sharedpreferences = getSharedPreferences("myPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString(EXTRA_COUNTRY_SITE,tvs.getText().toString());
            editor.commit();

2)在活动B中

SharedPreferences sharedpreferences;
sharedpreferences = getSharedPreferences("myPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString(EXTRA_COUNTRY_EMPLOYEE,tvs.getText().toString());
            editor.commit();

3)在活动C中使用它们

SharedPreferences prefs = this.getSharedPreferences("myPref", Context.MODE_PRIVATE);
String countrySite = prefs.getString(EXTRA_COUNTRY_SITE, null);
String countryEmp = prefs.getString(EXTRA_COUNTRY_EMPLOYEE, null);