Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習小結之獲取被啟動的Activity傳回的數據

Android學習小結之獲取被啟動的Activity傳回的數據

編輯:關於Android編程

當前Activity:包含一個Button和一個TextView,用於啟動另一個Activity和顯示傳回的數據,這裡重寫了onActivityResult()方法。

public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到TextView
textView=(TextView)findViewById(R.id.textView);
findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
startActivityForResult(intent,0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
textView.setText("另外一個Activity傳回來的數據是:"+data.getStringExtra("data"));
}
}

XML文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.androidtest.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="啟動另一個Activity"
android:id="@+id/btnSend" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView" />
</LinearLayout>

被啟動的Activity:包含一個Button和editText,用於將數據發送回去和輸入要傳的數據。

public class AnotherActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another);
editText= (EditText) findViewById(R.id.editText);
Button button= (Button) findViewById(R.id.btnSendBack);
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();
}
});
}
}

xml文件:activity_another.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.androidtest.AnotherActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="發送回去"
android:id="@+id/btnSendBack"/>
</LinearLayout> 

運行結果:

補充:這裡點擊發送回去按鈕返回上一個Activity沒有問題,但是如果點系統自帶的返回鍵就會出錯了,出現此bug的原因就是resultCode沒有判斷,點擊系統自帶的返回鍵的resultCode==RESULT_CANCELED,所以是不一樣的。

解決方法:所以這裡的requestCode和resultCode就能發揮作用了,在上述程序中requestCode==0,resultCode==1,也就是需要判斷是否是跳轉到該Activity以及返回上一個Activity是通過該按鈕還是通過系統返回鍵來進行的,所以MainActivity中的onActivityResult()方法可以改進為:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==0){
if(resultCode==1){
textView.setText("另外一個Activity傳回來的數據是:"+data.getStringExtra("data"));
}
}
}

以上所述是小編給大家介紹的獲取被啟動的Activity傳回的數據,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved