使用場景:
類似於這種場景:第一個Activity中需要選擇設備的經緯度信息(在百度選擇地理位置選擇),因此需要重新開一個Activity界面顯示地圖,讓用戶在地圖上標註地點,取得經緯度信息,並返回第一個頁面,保存在經緯度信息欄;
步驟:
1、第一個MainActivity.java:
通過startActivityForResult(Intent intent, requestCode int)方法啓動第二個Activity;
package top.javaer.app.sound;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.getChuanzhi);
findViewById(R.id.startAnotherActivity).setOnClickListener(new View.OnClickListener() {
/**
* Activity之間通過Intent傳遞自定義的值對象
* @param view
*/
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra("user", new User("Jamie", 20));
// startActivity(i);
startActivityForResult(i, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
textView.setText("第二個Activity傳過來的值是:" + data.getStringExtra("data"));
}
}
2、第二個SecondActivity.java:
通過Intent傳遞參數,值爲editText.getText().toString();
通過setResult(resultCode int, Intent intent)設置返回狀態碼、返回數據;
通過finish();結束當前的Activity;
package top.javaer.app.sound;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// Activity獲取Intent傳遞過來的值對象
TextView textView = findViewById(R.id.secondText);
// User user = (User) getIntent().getSerializableExtra("user");
User user = (User) getIntent().getParcelableExtra("user");
textView.setText(String.format("user info(name=%s, age=%d)", user.getName(), user.getAge()));
final EditText editText = findViewById(R.id.shuru);
Button button = findViewById(R.id.fanhui);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent();
i.putExtra("data", editText.getText().toString());
setResult(1, i);
finish();
}
});
}
}
3、結果顯示:第二個Activity傳過來的值是:...(第二個頁面輸入的數據)。
4、補充兩個界面的xml文件:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="368dp"
android:layout_height="447dp"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="56dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/startAnotherActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳轉下一個Activity"/>
<TextView
android:id="@+id/getChuanzhi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/startAnotherActivity"/>
</LinearLayout>
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="368dp"
android:layout_height="447dp"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="56dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/secondText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/shuru"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回第一個Activity"
android:layout_below="@+id/shuru"/>
</LinearLayout>
更多Android、iOS、Python、Java、MySQL的文章,請點擊:
http://blog.csdn.net/jamiecheung
http://blog.csdn.net/u010841622