android intent参数是上次的结果,【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动...
1.0 可以利用Intent吧數(shù)據(jù)傳遞給上一個(gè)活動(dòng),新建一個(gè)叫“hellotest01”的項(xiàng)目。
新建活動(dòng)FirstActivity,勾選“Generate Layout File”和“Launcher Activity”。
image
修改AndroidMainifest.xml中的內(nèi)容:
android:name=".FirstActivity"
android:label="第一個(gè)活動(dòng)">
在布局文件activity_first.xml增減一個(gè)按鈕:<?xml ?version="1.0"?encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstActivity">
android:id="@+id/button_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按鈕1"
/>
顯示Intent調(diào)用,FirstActivity .java:package?com.example.hellotest01;import?android.content.Intent;import?android.support.v7.app.AppCompatActivity;import?android.os.Bundle;import?android.view.View;import?android.widget.Button;public?class?FirstActivity?extends?AppCompatActivity?{????@Override
protected?void?onCreate(Bundle?savedInstanceState)?{????????super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button?button1?=?(Button)?findViewById(R.id.button_1);
button1.setOnClickListener(new?View.OnClickListener()?{????????????@Override
public?void?onClick(View?v)?{
String?data?=?"你好,活動(dòng)二";
Intent?intent?=?new?Intent(FirstActivity.this,SencondActivity.class);//????????????????intent提供一系列的putExtra()方法重載//????????????????第一個(gè)參數(shù)是鍵,方便目標(biāo)活動(dòng)接收時(shí)取值,第二個(gè)參數(shù)才是真正傳遞的數(shù)據(jù)。
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
}
}
新建活動(dòng)SencondActivity,勾選“Generate Layout File”。
SencondActivity.java(負(fù)責(zé)接收,并用debug.d 打印):package?com.example.hellotest01;import?android.content.Intent;import?android.support.v7.app.AppCompatActivity;import?android.os.Bundle;import?android.util.Log;public?class?SencondActivity?extends?AppCompatActivity?{????@Override
protected?void?onCreate(Bundle?savedInstanceState)?{????????super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent?intent?=?getIntent();
String?data?=?intent.getStringExtra("extra_data");
Log.d("**********活動(dòng)二**********",data);
}
}
運(yùn)行:
image
image
image
2.0 返回?cái)?shù)據(jù)剛給上一個(gè)活動(dòng)
新建活動(dòng)ThirdActivity,勾選“Generate Layout File”。
由于之前忘了給新建的活動(dòng)SecondActivity和ThirdActivity弄個(gè)名字,這里修改AndroidMainifest.xml中的內(nèi)容補(bǔ)上:
android:label="第三個(gè)活動(dòng)">
android:label="第二個(gè)活動(dòng)"/>
給活動(dòng)FhirdActivity布局增加一個(gè)Button,activity_third.xml:<?xml ?version="1.0"?encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ThirdActivity">
android:id="@+id/button_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按鈕3"?/>
SecondActivity.java(說(shuō)明解釋都在源代碼里面):package?com.example.hellotest01;import?android.content.Intent;import?android.support.annotation.Nullable;import?android.support.v7.app.AppCompatActivity;import?android.os.Bundle;import?android.util.Log;import?android.view.View;import?android.widget.Button;public?class?SencondActivity?extends?AppCompatActivity?{????@Override
protected?void?onCreate(Bundle?savedInstanceState)?{????????super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent?intent?=?getIntent();
String?data?=?intent.getStringExtra("extra_data");
Log.d("**********活動(dòng)二**********",?data);
Button?button2?=?(Button)?findViewById(R.id.button_2);
button2.setOnClickListener(new?View.OnClickListener()?{????????????@Override
public?void?onClick(View?v)?{
String?data?=?"你好,活動(dòng)三";
Intent?intent?=?new?Intent(SencondActivity.this,?ThirdActivity.class);//????????????????用startActivityForResult啟動(dòng)活動(dòng)ThirdActivity,請(qǐng)求碼只需要一個(gè)唯一值即可,這里傳入1
startActivityForResult(intent,?1);
}
});
}????//????在活動(dòng)ThirdActivity被銷毀之后會(huì)回調(diào)上一個(gè)活動(dòng)的onActivityResult()方法,//????因此我們需要在活動(dòng)SencondActivity中重寫這個(gè)方法來(lái)得到返回的數(shù)據(jù)
@Override
protected?void?onActivityResult(int?requestCode,?int?resultCode,?@Nullable?Intent?data)?{????????//onActivityResult()?方法帶有三個(gè)參數(shù)//????????requestCode??在啟動(dòng)活動(dòng)中傳入的請(qǐng)求碼//????????resultCode???在返回?cái)?shù)據(jù)時(shí)傳入的處理結(jié)果//????????data?????????攜帶著返回?cái)?shù)據(jù)的Intent//????????由于在一個(gè)活動(dòng)中有可能調(diào)用onActivityResult()方法去啟動(dòng)很多不同的活動(dòng)//????????每一個(gè)活動(dòng)返回的數(shù)據(jù)都會(huì)調(diào)用onActivityResult()方法,//????????因此我們需要做的是檢查requestCode的值來(lái)判斷數(shù)據(jù)來(lái)源,確定數(shù)據(jù)是從ThirdActivity返回之后,//????????再通過(guò)resultCode的值來(lái)判斷處理結(jié)果是否成功//????????最后從data中取值并進(jìn)行數(shù)據(jù)操作。
switch?(requestCode)?{????????????case?1:????????????????if?(resultCode?==?RESULT_OK)?{
String?returnedData?=?data.getStringExtra("data_return");
Log.d("**********返回?cái)?shù)據(jù)為**********",?returnedData);
}????????????????break;????????????default:
}
}
}
ThirdActivity.java(說(shuō)明解釋都在源代碼里面):package?com.example.hellotest01;import?android.content.Intent;import?android.support.v7.app.AppCompatActivity;import?android.os.Bundle;import?android.view.View;import?android.widget.Button;public?class?ThirdActivity?extends?AppCompatActivity?{????@Override
protected?void?onCreate(Bundle?savedInstanceState)?{????????super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
Button?button3?=?(Button)?findViewById(R.id.button_3);
button3.setOnClickListener(new?View.OnClickListener()?{????????????@Override
public?void?onClick(View?v)?{//????????????????新建一個(gè)啟動(dòng)器,不過(guò)只用來(lái)傳遞數(shù)據(jù)而已,沒(méi)有任何意圖
Intent?intent?=?new?Intent();
intent.putExtra("data_return",?"你好,活動(dòng)二");//????????????????setResult()方法專門用于返回上一個(gè)為活動(dòng)數(shù)據(jù)的//????????????????第一個(gè)參數(shù)用于向上一個(gè)活動(dòng)返回處理結(jié)果,一般只使用RESULT_OK和RESULT_CANCELED這兩個(gè)值//????????????????第二個(gè)參數(shù)則把帶有數(shù)據(jù)的Intent傳遞回去,然后調(diào)用finish()方法銷毀當(dāng)前活動(dòng)
setResult(RESULT_OK,?intent);
finish();
}
});
}
}
完畢,運(yùn)行,因?yàn)榫蛣?chuàng)建活動(dòng)FirstActivity為主活動(dòng),所以需要一個(gè)個(gè)點(diǎn)過(guò)去,按鈕一 按鈕二 按鈕三:
image
image
image
image
image
3.0 當(dāng)然,這樣有個(gè)缺點(diǎn),如果用戶不是通過(guò)點(diǎn)擊按鈕,而是通過(guò)Back鍵(手機(jī)上的后撤/返回鍵)會(huì)到的活動(dòng)SecondActivity,這樣數(shù)據(jù)無(wú)法返回,解決方案:
在ThirdActivity.java中重寫onBackPressed()方法來(lái)解決:package?com.example.hellotest01;import?android.content.Intent;import?android.support.v7.app.AppCompatActivity;import?android.os.Bundle;import?android.view.View;import?android.widget.Button;public?class?ThirdActivity?extends?AppCompatActivity?{????@Override
protected?void?onCreate(Bundle?savedInstanceState)?{????????super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
Button?button3?=?(Button)?findViewById(R.id.button_3);
button3.setOnClickListener(new?View.OnClickListener()?{????????????@Override
public?void?onClick(View?v)?{//????????????????新建一個(gè)啟動(dòng)器,不過(guò)只用來(lái)傳遞數(shù)據(jù)而已,沒(méi)有任何意圖
Intent?intent?=?new?Intent();
intent.putExtra("data_return",?"你好,活動(dòng)二,button");//????????????????setResult()方法專門用于返回上一個(gè)為活動(dòng)數(shù)據(jù)的//????????????????第一個(gè)參數(shù)用于向上一個(gè)活動(dòng)返回處理結(jié)果,一般只使用RESULT_OK和RESULT_CANCELED這兩個(gè)值//????????????????第二個(gè)參數(shù)則把帶有數(shù)據(jù)的Intent傳遞回去,然后調(diào)用finish()方法銷毀當(dāng)前活動(dòng)
setResult(RESULT_OK,?intent);
finish();
}
});
}????@Override
public?void?onBackPressed()?{
Intent?intent?=?new?Intent();
intent.putExtra("data_return","你好,活動(dòng)二,back");
setResult(RESULT_OK,intent);
finish();
}
}
運(yùn)行,點(diǎn)擊:按鈕一 按鈕二 按鈕三,這時(shí)候回到“活動(dòng)二”界面,再按下“按鈕二”,這時(shí)候點(diǎn)擊“Back鍵”:
image
image
image
image
image
image
作者:我睡醒剛剛
鏈接:https://www.jianshu.com/p/9b409e5f54df
總結(jié)
以上是生活随笔為你收集整理的android intent参数是上次的结果,【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java8实战教程,[JAVA] 汪大神
- 下一篇: android 网络调试 源代码,And