Android成长之路(2)——简单地使用Intent

来源:互联网 发布:网络创业的三个途径 编辑:程序博客网 时间:2024/06/05 08:59

接下来会在MainActivity里面添加代码,当按下一个Send按钮就可以开始一个新的activity
上一次已经写好了一个布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    app:layout_behavior="@string/appbar_scrolling_view_behavior"    tools:showIn="@layout/activity_main">    <EditText        android:id="@+id/edit_message"        android:layout_weight="1"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:hint="@string/edit_message"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button_send"/></LinearLayout>

按钮点击响应

现在,在res/layout目录下, 修改content_my.xml文件.
1、添加 android:onClick 属性到Button这个控件里.
res/layout/content_my.xml:

<Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button_send"        android:onClick="sendMessage"/>

android:onClick属性的值是, “sendMessage”, 作为activity的一个函数的名字,当点击这个按钮系统就会调用这个方法。后面会再探讨onClick的几种用法。。。

2、打开 MainActivity.java
在MainActivity 类里,, 添加 sendMessage() 函数 .

 /** Called when the user clicks the Send button */    public void sendMessage(View view){        //do something    }

用这种方法来监听按钮的操作,有几个点要注意的:
1)、函数一定要是public
2)、return void
3)、只能有一个参数

注意要确保在MainAcitvity.java别写错了函数名字

创建一个Intent来启动一个新的Activity

首先,先创建一个新的Activity命名DisplayActivity
所有的Activity子类都要实现onCreate() 函数. 这个函数是一开始初始化Activity组件的地方,后面生命周期在详细了解一下。
选择好package, com.example.myapplication, 选择 New > Activity > Blank Activity.
Activity Name: DisplayMessageActivity
Layout Name: activity_display_message
Package name: com.mycompany.myfirstapp
创建好之后打开 DisplayMessageActivity.java 这个类已经包含了onCreate() 函数.

然后开始创建一个Intent
1、在MyActivity.java的sendMessage() 函数里面创建一个Intent来启动d DisplayMessageActivity

/** Called when the user clicks the Send button */    public void sendMessage(View view){        Intent intent = new Intent(MainActivity.this,DisplayActivity.class);    }

这里传递了两个参数(Context,Class):
第一个参数,当前的Activity,传入类型是Context
第二个参数,想要启动的Activity,传入类型是Class
2、先在 MyActivity class 最上面添加 EXTRA_MESSAGE 的声明,然后在sendMessage()函数里面添加代码:

public class MainActivity extends AppCompatActivity {    public final static String EXTRA_MESSAGE = "com.example.myapplication.MESSAGE";    ......}
/** Called when the user clicks the Send button */    public void sendMessage(View view){        Intent intent = new Intent(MainActivity.this,DisplayActivity.class);        EditText editText = (EditText) findViewById(R.id.edit_message);        String message = editText.getText().toString();        intent.putExtra(EXTRA_MESSAGE,message);        startActivity(intent);    }

用 findViewById() 找到 EditText .
EditText输入的字符,用putExtra() 来把它添加到 intent 里面.
Intent 可以运输key-value的这种数据类型. 第一个参数是 key ,第二个参数是值 value

为了下一个activity 方便查找intent传过来的值, 应该使用包名作为前缀来定义key,并且用public来修饰,这样就确保了key是唯一的,不会跟其他的app弄混了

接收Intent

1、每一个Activity都可以通过Intent来启动,调用getIntent()来获取Intent里面装的内容
2、通过 getStringExtra() 函数来提取被传过来的数据.

Intent intent = getIntent();String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

显示消息

在 res/layout 目录下修改 content_display.xml .
1、添加 android:id 属性到 RelativeLayout. 因为Activity的代码需要通过id来找到这个layout .

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    ......    android:id="@+id/content"></RelativeLayout>

2、再回到DisPlayActivity.Java,在onCreate() 函数中, 创建一个TextView 对象.
设置 text size ,通过 setText()来设置显示的信息.
把TextView添加到前面定义好的RelativeLayout里面去.

TextView textView = new TextView(this);textView.setTextSize(40);textView.setText(message);RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);layout.addView(textView);

现在DisplayActivity.java的代码如下:

public class DisplayActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_display_message);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        //这里开始添加了相关的代码        Intent intent = getIntent();        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);        TextView textView = new TextView(this);        textView.setTextSize(40);        textView.setText(message);        RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);        layout.addView(textView);    }}

效果:
这里写图片描述

输入点击发送后

这里写图片描述

0 0
原创粉丝点击