我们都了解使用 startActivity(intent) 新的activity只能传递数据,却无法返回数据,返回新activity返回的数据我们可以替换startActivityForResult(Intent intent , int 标志符)
做个备忘录的例子,两个activity: IntentDemo 和 IntentSecend:
activity_intent_demo.xml代码如下:
1 <LinearLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:orientation="vertical" 8 tools:context="com.hs.example.exampleapplication.IntentDemo"> 9 10 <ListView 11 android:id="@+id/intent_listView" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content"/> 14 15 </LinearLayout>
IntentDemo 代码如下:
1 public class IntentDemo extends AppCompatActivity implements AdapterView.OnItemClickListener , 2 AdapterView.OnItemLongClickListener{ 3 4 String [] aMemo = {"1.单击可以编辑备忘" , "2.长按可以清楚备忘" , "3." , "4." , "5." , "6."}; 5 6 ArrayAdapter<String> arrayAdapter; 7 8 ListView intent_listView ; 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_intent_demo); 14 15 intent_listView = this.findViewById(R.id.intent_listView); 16 17 arrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,aMemo); 18 19 intent_listView.setAdapter(arrayAdapter); //设置list view的内容 20 intent_listView.setOnItemClickListener(this); //绑定单击监听 21 intent_listView.setOnItemLongClickListener(this); //绑定长按监听 22 } 23 24 @Override 25 public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 26 Intent intent = new Intent(this,IntentSecend.class); 27 //intent.putExtra("编号",pos + 1); //传递编号 28 intent.putExtra("备忘",aMemo[pos]); //传递备忘内容 29 startActivityForResult(intent , pos); //跳转到编辑内容activity,并以选项位置pos为标志符 30 } 31 32 @Override 33 public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { 34 aMemo[i] = (i+1) + "."; //清楚内容,只剩编号 35 arrayAdapter.notifyDataSetChanged(); //通知list view更新要显示的内容 36 return true; 37 } 38 39 @Override 40 protected void onActivityResult(int requestCode , int resultCode , Intent intent){ 41 if(resultCode == RESULT_OK){ 42 aMemo[requestCode] = intent.getStringExtra("备忘"); 43 Toast.makeText(this,aMemo[requestCode].toString(),Toast.LENGTH_SHORT).show(); 44 arrayAdapter.notifyDataSetChanged(); 45 } 46 } 47 }
activity_intent_secend.xml代码如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context="com.hs.example.exampleapplication.IntentSecend"> 10 11 <TextView 12 android:id="@+id/text_view" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:background="#FBBB" 16 android:gravity="top" 17 android:text="1." 18 /> 19 20 <EditText 21 android:id="@+id/edit_Text" 22 android:layout_width="match_parent" 23 android:layout_height="0dp" 24 android:layout_weight="1" 25 android:gravity="top"/> 26 27 <LinearLayout 28 android:layout_width="match_parent" 29 android:layout_height="wrap_content" 30 android:gravity="center" 31 android:orientation="horizontal"> 32 33 <Button 34 android:layout_width="wrap_content" 35 android:layout_height="wrap_content" 36 android:onClick="onCancel" 37 android:text="取消"/> 38 39 <Button 40 android:layout_width="wrap_content" 41 android:layout_height="wrap_content" 42 android:onClick="onSave" 43 android:text="保存"/> 44 45 46 </LinearLayout> 47 48 </LinearLayout>
IntentSecend代码如下:
1 public class IntentSecend extends AppCompatActivity { 2 3 TextView tv ; 4 EditText et ; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_intent_secend); 10 11 Intent intent = getIntent(); 12 13 String str = intent.getStringExtra("备忘"); //读取传过来的备注数据 14 15 tv = this.findViewById(R.id.text_view); 16 tv.setText(str.substring(0,2)); //text view的值 17 18 et = this.findViewById(R.id.edit_Text); 19 if(str.length()>2){ //将传过来的数据去除前两个字符,然后填入edittext 20 et.setText(str.substring(2)); 21 } 22 } 23 24 public void onSave(View view) { 25 Intent intent2 = new Intent(); 26 intent2.putExtra("备忘",tv.getText() + "" + et.getText()); 27 setResult(RESULT_OK , intent2); 28 finish(); 29 } 30 31 public void onCancel(View view) { 32 setResult(RESULT_CANCELED); 33 finish(); 34 } 35 36 }
运行效果: