我在onClick
中有MainActivity
方法,如下所示,
public void onClick(View view) {
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("I", "0");
startActivity(i);
}
在SecondActivity
我验证了Intent
如下
if (getIntent().getStringExtra("I") == null) {
Toast.makeText(this, "NULL", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "NOT NULL", Toast.LENGTH_LONG).show();
}
并从ThirdActivity
开始SecondActivity
,如下所示
public void onClick(View view) {
Intent i = new Intent(this, ThirdActivity.class);
startActivity(i);
}
现在,当从SecondActivity
ThirdActivity
返回getIntent().getStringExtra("I")
时,会返回null
。我还尝试覆盖onOptionsItemSelected
如下。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent i = getIntent();
i.putExtra("I", "0");
break;
}
return super.onOptionsItemSelected(item);
}
现在不知道如何解决这个问题。我不想在这个问题上使用SharedPreference
。
答案 0 :(得分:2)
请按以下步骤操作:
为结果启动ThirdActivity
public void onClick(View view) {
Intent i = new Intent(this, ThirdActivity.class);
startActivityForResult(i, 1);
}
更新以下方法,添加setResult(Activity.RESULT_OK, i);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent i = getIntent();
i.putExtra("I", "0");
setResult(Activity.RESULT_OK, i);
break;
}
return super.onOptionsItemSelected(item);
}
在SecondActivity中,实现onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == 1 && resultCode == RESULT_OK) {
// Now use data.getStringExtra("I");
}
}
答案 1 :(得分:1)
这是因为当你从第三个活动回到第二个活动时,getIntent()返回第三个活动的意图,而不是第一个活动的意图。
在从第三个活动导航到第二个活动时,你没有传递任何字符串,因此你得到一个空值。
答案 2 :(得分:1)
您没有完成任何活动,并且您正在将值从主要活动传递到第二个,然后调用第三个活动,只是从第三个活动返回并恢复第二个活动,您没有将任何数据传递给第二个活动来自第三项活动。
只需更改您的代码,如下所示: -
//from second to third
public void onClick(View view) {
Intent i = new Intent(this, ThirdActivity.class);
startActivity(i);
finish();
}
// returning from third to second
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent i = new Intent(this, second.class);
i.putextra("I","0");
startActivity(i);
finish();
break;
}
return super.onOptionsItemSelected(item);
}
你也可以这样改变: -
@Override
public void onBackPressed() {
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("I","0");
startActivity(i);
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
仅在您的第三个活动中
如果你不想startactivty那么startActivtyForResult()从第二到第三: -
startActivityForResult(i,101);
在第二项活动中实施onActivtyResult方法: -
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == 101 && resultCode == RESULT_OK) {
// Now use data.getStringExtra("I");
}
}
对于第三个活动,只需在onBackpress()中完成它,如: -
@Override
public void onBackPressed() {
Intent resultData = new Intent();
resultData.putExtra("I", "0");
setResult(Activity.RESULT_OK, resultData);
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
答案 3 :(得分:1)
您可以尝试使用#RUN C CODE
./simv -gui -ucli +DVE +UVM_NO_RELNOTES -l simv.log +UVM_TESTNAME=keycontrol_basic_test -do ../../verification/PVE/keycontrol/tools/keycontrol_ucli_init.synopsys -sv_lib keycontrol_C_code_wrapper
方法从startActivityForResult()
到SecondActivity
进行链接,然后在杀死ThirdActivity
之前使用setResult(intent)
。因此,当您返回ThirdActivty
时,您将获得SecondActivity
ThirdActivty
onActivityResult
SecondActivity
方法中的结果意图。
希望这会有所帮助。
答案 4 :(得分:0)
从ThirdActivity转向SecondActivity时进行更改:
Intent i = new Intent(this, SeconActivity.class);
i.putExtra("I",getIntent().getStringExtra("I"));
startActivity(i);
答案 5 :(得分:0)
你必须再次通过
i.putExtra("I", "0");
从第三项活动到第二项活动
答案 6 :(得分:0)
试试这个: 把它放在你的第三个活动上
@Override
public void onBackPressed() {
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("I","0");
startActivity(i);
finish();
}