接着上一篇博客,我们接受来自文本框的内容,按按钮并将内容发送,然后另外一个页面会显示我刚才输入的内容
step1:
先给button加上监听事件 ,onClick
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/send"
android:onClick="sendMessage" />
当点击按钮时,就会调用MainActivity中的sendMessage方法
step2:
写sendMessage方法
//方法必须是public void 并且参数为唯一的view
public void sendMessage(View view){
Intent intent=new Intent(this, DisplayMessageActivity.class);
//将view赋值给edittext
EditText editText=(EditText) findViewById(R.id.edit_messsage);
//得到edittext的值
String message=editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
//启动第二个activity
startActivity(intent);
}
在这个方法中有几个地方需要注意,首先,方法必须是public void类型,并且参数唯一必须是View类型的参数
代码中含有Intent,Intent在英文中是企图,意图的意思,放在android中是提供两个activity连接的对象,代表一个应用(可以是activity)想要干什么,大部分时候被用来启动另一个activity。
Intent构造函数有两个参数,第一个是Context,在这里我们用this,代表当前的activity,第二个参数是想要传递Intent的应用组件的class对象,我们这里是DisplayMessageActivity.class,我们使用DisplayMessageActivity来显示我们输入的字母。
由于之前我们定义了,EditText的id为edit_message,所以这里使用findViewById得到R.java文件中的EditText并赋值
然后将输入的值放在自己定义的EXTRA_MESSAGE这个public的变量中,然后启动另一个activity
step3:
写第二个activity
右键,新建activity文件,名字为DisplayMessageActivity,可以看到里面有很多override函数,里面有oncreate()函数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get message from intent
Intent intent=getIntent();
String message=intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
//Create textview
TextView textView=new TextView(this);
textView.setTextSize(40);
textView.setText(message.toString());
//set the textview as the activity layout
setContentView(textView);
}
我们把原来的代码删掉,得到Intent实例—>得到message—>新建TextView,设置大小—>设置TextView的值—>setContentView(textView)。
然后我们启动应用
上面的是一帆风顺的结果,但是对于刚入门的我来说调试出结果还花了挺久的时间。
这是一开始报错:通过调试发现sendMessage方法能进入,并且变量的值也能获得,所以很困惑,应该是缓存的问题。
继续尝试应用,报这个错误:
unable to start activity componentInfo
我调试过程中,第一个activity是没有问题的,editText的值能获得,所以问题出在第二个activity上,
结果一查代码是onCreate()中我把一开始super.onCreate()函数删掉了,哎,这样的脑残错误耽误了好多时间。
好了,这个尝试就结束了。