zoukankan      html  css  js  c++  java
  • Android学习 -- Activity 以及Activity之间值传递

    项目结构如图

    关键代码如下

    strings.xml文件代码如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3 
     4     <string name="app_name">ActivityDemo</string>
     5     <string name="action_settings">Settings</string>
     6     <string name="hello_world">Hello world!</string>
     7     <string name="nextView">NextView</string>
     8     <string name="nextViewOnclick">nextViewOnclick</string>
     9     <string name="title_activity_first">FirstActivity</string>
    10     <string name="title_activity_second">SecondActivity</string>
    11     <string name="btnClose">Close</string>
    12     <string name="onCloseClick">onCloseClick</string>
    13 
    14 </resources>

    说明:

    string.xml是字符资源文件,用于存放项目中所使用的字符串内容。例如:文本框、按钮等文字内容。

    nextViewOnclick、onCloseClick 是按钮的点击事件名称,在对应下面的activity_frist.xml 、activity_second.xml文件中会看见这两个事件注册。

    activity_first.xml文件代码如下:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".FirstActivity" >
    10 
    11     <TextView
    12         android:id="@+id/textView1"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:text="@string/hello_world" />
    16 
    17     <EditText
    18         android:id="@+id/editText1"
    19         android:layout_width="wrap_content"
    20         android:layout_height="wrap_content"
    21         android:layout_alignLeft="@+id/textView1"
    22         android:layout_below="@+id/textView1"
    23         android:layout_marginLeft="18dp"
    24         android:layout_marginTop="18dp"
    25         android:ems="10"
    26         android:inputType="text" >
    27 
    28         <requestFocus />
    29     </EditText>
    30 
    31     <Button
    32         android:id="@+id/button1"
    33         android:layout_width="wrap_content"
    34         android:layout_height="wrap_content"
    35         android:layout_alignLeft="@+id/editText1"
    36         android:layout_below="@+id/editText1"
    37         android:layout_marginTop="63dp"
    38         android:onClick="@string/nextViewOnclick"
    39         android:text="@string/nextView" />
    40 
    41 </RelativeLayout>

    说明:

    RelativeLayout节点中的属性定义了界面的高度、宽度、间隔边距、以及关联的java文件中的java类(tools:context=".FirstActivity")。类名前面带点,说明是在同一个java包中。如果不在同包中,则需要包名全称。

    从上面的代码中可以看出,first页面定义了一个文本框、一个输入文本框、一个按钮。

    这里需要注意一下按钮的onClick事件是读取string文件中的nextViewOnclick字符串来进行定义的。当然也可以在这里直接定义,不需要到string.xml文件中来读取。暂时不清楚为什么可以这么定义。猜测这种做法可以非常灵活的提供修改。将来可以不用修改java代码,只需要修改这个xml文件就可以达到修改事件的目的。并且提供两种方式来进行事件修改。如果说定义到了string.xml里面的话,还可以根据不同的语言区域来进行事件不同的定义。

    FristActivity.java文件代码如下:

     1 package hqq.steven.activitydemo;
     2 
     3 import android.os.Bundle;
     4 import android.app.Activity;
     5 import android.content.Intent;
     6 import android.util.Log;
     7 import android.view.Menu;
     8 import android.view.View;
     9 import android.widget.EditText;
    10 
    11 public class FirstActivity extends Activity {
    12 
    13     //窗体创建事件。类似于.NET windows编程中的Form_Load事件。
    14     @Override
    15     protected void onCreate(Bundle savedInstanceState) {
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_first);
    18     }
    19 
    20     @Override
    21     public boolean onCreateOptionsMenu(Menu menu) {
    22         // Inflate the menu; this adds items to the action bar if it is present.
    23         getMenuInflater().inflate(R.menu.first, menu);
    24         return true;
    25     }
    26 
    27     /**
    28      * 点击下一页按钮事件处理
    29      * @param view
    30      */
    31     public void nextViewOnclick(View view) {
    32         //创建意图,用于给下个窗体传值
    33         Intent intent = new Intent(this, SecondActivity.class);
    34         //获取当前页面中文本框的值。这种findViewById的做法有点感觉像javascript中的getElementById的感觉。
    35         //在.NET中可以直接通过空间名称来进行直接操作,这里必须要通过这种方式来进行获取该控件。
    36         EditText et = (EditText) this.findViewById(R.id.editText1);
    37         String msg = et.getText().toString().trim();
    38         //将文本框中的内容,压入到意图中去。
    39         intent.putExtra("message", msg);
    40         
    41         //启动新的活动,设置意图,以及请求编码,该请求编码用于返回时进行识别。
    42         this.startActivityForResult(intent, 2);
    43     }
    44 
    45     /**
    46      * 处理回传值
    47      * 第二窗体返回值,在此方法中进行处理。
    48      */
    49     @Override
    50     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    51         // TODO Auto-generated method stub
    52         // super.onActivityResult(requestCode, resultCode, data);
    53         //比对之前的请求编码,以及核对活动返回的编码是否是Activity.RESULT_OK
    54         if (Activity.RESULT_OK == resultCode && requestCode == 2) {
    55             String result = data.getStringExtra("result");
    56             Log.i("HQQ:>", "Frist-->" + result);
    57             EditText et = (EditText) this.findViewById(R.id.editText1);
    58             //在当前窗体中显示回传的内容。
    59             et.setText(result);
    60         }
    61     }
    62 }

    activity_second.xml文件中的代码如下: 

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".SecondActivity" >
    10 
    11     <TextView
    12         android:id="@+id/textView1"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:text="@string/hello_world" />
    16 
    17     <Button
    18         android:id="@+id/button1"
    19         android:layout_width="wrap_content"
    20         android:layout_height="wrap_content"
    21         android:layout_alignLeft="@+id/textView1"
    22         android:layout_below="@+id/textView1"
    23         android:layout_marginTop="97dp"
    24         android:onClick="@string/onCloseClick"
    25         android:text="@string/btnClose" />
    26 
    27     <EditText
    28         android:id="@+id/editText1"
    29         android:layout_width="wrap_content"
    30         android:layout_height="wrap_content"
    31         android:layout_alignLeft="@+id/button1"
    32         android:layout_below="@+id/textView1"
    33         android:layout_marginTop="42dp"
    34         android:ems="10"
    35         android:inputType="text" >
    36 
    37         <requestFocus />
    38     </EditText>
    39 
    40 </RelativeLayout>

    说明:注意按钮的onclick事件注册采用的是string.xml文件中字符内容。该方式与activity_first.xml中的情况一样。

    SecondActivity.java文件中的代码如下:

     1 package hqq.steven.activitydemo;
     2 
     3 import android.os.Bundle;
     4 import android.app.Activity;
     5 import android.content.Intent;
     6 import android.util.Log;
     7 import android.view.Menu;
     8 import android.view.View;
     9 import android.widget.EditText;
    10 import android.widget.TextView;
    11 
    12 public class SecondActivity extends Activity {
    13 
    14     @Override
    15     protected void onCreate(Bundle savedInstanceState) {
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_second);
    18 
    19         //获取意图,将前窗体传过来的值进行显示。
    20         Intent intent = this.getIntent();
    21         String msg = intent.getStringExtra("message");
    22         TextView tv = (TextView) this.findViewById(R.id.textView1);
    23         tv.setText(msg);
    24     }
    25 
    26     @Override
    27     public boolean onCreateOptionsMenu(Menu menu) {
    28         // Inflate the menu; this adds items to the action bar if it is present.
    29         getMenuInflater().inflate(R.menu.second, menu);
    30         return true;
    31     }
    32 
    33     /**
    34      * 点击关闭按钮时处理方法
    35      * 将本窗体填入的数据通过意图进行返回。
    36      * @param view
    37      */
    38     public void onCloseClick(View view) {
    39         //获取当前窗体中文本框输入的内容
    40         EditText et = (EditText) this.findViewById(R.id.editText1);
    41         String msg = et.getText().toString().trim();
    42         //将获取的内容压入意图中
    43         Intent intent = this.getIntent();
    44         intent.putExtra("result", msg);
    45         Log.i("HQQ:>", "Seconde-->" + msg);
    46         
    47         //设置返回结果编号,以及返回的结果
    48         //需要注意的是,该返回的结果编号Activity.RESULT_OK必须与接收窗体的resultCode一致,
    49         //因为该值作为接收窗体判别的标识号。
    50         this.setResult(Activity.RESULT_OK, intent);
    51         
    52         //窗体结束
    53         this.finish();
    54     }
    55 
    56 }
  • 相关阅读:
    Django报错 No module named 'django.templates'
    Django 创建 hello world
    python(Django2.0) 安装
    create-react-app踩坑记
    Vue项目的痛点
    React 错误处理(componentDidCatch)
    Vue props双向绑定
    redux 中的 redux-thunk(中间件)
    webpack 搭建React(手动搭建)
    vue interceptors(拦截器)
  • 原文地址:https://www.cnblogs.com/stevenhqq/p/3516477.html
Copyright © 2011-2022 走看看