有時候需要activity返回的時候攜帶數據返回,比如短信群發,添加多個聯系人的時候,需要選擇listView里面的聯系人,同時把聯系人的數據返回。
首先需要在主activity里面設置意圖,進行跳轉,使用startActivityForResult而不是startActivity
Intent intent = new Intent(this, contactActivity.class); //啟動選擇聯系人的activity //告訴系統這個activity返回時會返回數據,第二個參數是請求碼 startActivityForResult(intent, 10);跳轉到界面以后,封裝數據準備攜帶數據返回
Intent data = new Intent(); //把要傳遞的數據封裝到intent對象 data.putExtra("name", objects[position]); //data就是intent攜帶的數據,此activity一旦被銷毀data就會傳遞到此activity中 setResult(0, data); //第一個參數是響應碼 //銷毀當前的activity finish();設置條目監聽使用setOnItemClickListenerlv.setOnItemClickListener(new OnItemClickListener(){ //position:用戶點擊率哪一個條目 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } });獲取到封裝的數據返回,執行onActivityResult(int requestCode, int resultCode, Intent data)來反饋獲取的數據當一個應該返回數據的activity被銷毀的時候,此方法調用,用于接受數據
@Override PRotected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); }請求碼和響應碼,主要是針對請求不同的activity用請求不同的activty,同時一個activity里面有不同的返回數據需要返回碼來區分
示例代碼:activity_main.xml
<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" tools:context=".MainActivity" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/et_name" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="請輸入聯系人" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="請選擇聯系人" android:onClick="click1" /> </LinearLayout> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="5" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="發送" android:onClick="click2" /></LinearLayout>MainActivity.javapackage com.ldw.contact;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click1(View v){ Intent intent = new Intent(this, contactActivity.class); //啟動選擇聯系人的activity //告訴系統這個activity返回時會返回數據 startActivityForResult(intent, 10); } //當一個應該返回數據的activity被銷毀的時候,此方法調用,用于接受數據 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ //根據請求碼判斷哪一個activity,接受哪一個activity返回的數據 if(requestCode == 10){ EditText et_name = (EditText) findViewById(R.id.et_name); //獲取到傳遞過來的參數 et_name.setText(data.getStringExtra("name")); } super.onActivityResult(requestCode, resultCode, data); } }activity_contact.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView></LinearLayout>item_contact.xml聯系人條目
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>contactActivity.java
package com.ldw.contact;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;public class contactActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact); ListView lv = (ListView) findViewById(R.id.lv); final String[] objects = new String[]{ "A", "B", "C", "D" }; lv.setAdapter(new ArrayAdapter<String> (this, R.layout.item_contact, R.id.tv, objects)); //對listView設置條目點擊偵聽,知道什么時候點擊率條目,以及點擊了哪一個條目 lv.setOnItemClickListener(new OnItemClickListener(){ //position:用戶點擊率哪一個條目 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent data = new Intent(); //把要傳遞的數據封裝到intent對象 data.putExtra("name", objects[position]); //data就是intent攜帶的數據,此activity一旦被銷毀data就會傳遞到此activity中 setResult(0, data); //銷毀當前的activity finish(); } }); }}
新聞熱點
疑難解答