Android-----Intent通过startActivityForResult(Intent intent , int 标志符)启动新的Activity

我们都了解使用 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 }

运行效果:

原文地址:https://www.cnblogs.com/xiobai/p/10775733.html