第一行代码Android 【学习笔记1】
<ahref="install.m2.repo">Install Repository and syncproject</a><br><ahref="open.dependency.in.project.structure">Show in ProjectStructure dialog</a>这个问题。
解决方法:在build.gradle的allprojects修改为:
allprojects{
repositories {
jcenter()
maven {
url"https://maven.google.com"
}
}
}
下面开始正文。
1.1.创建活动
选择project视图->展开app 然后选择src 选择java->点击包->New->Activity->会弹出一个对话框,然后选择相应的活动。
任何活动都需要重写Acitivity的onCreate()方法,但是Android Studio已经帮我们完成了。
1.2.创建和加载布局
右击app/src/main/res目录->new -> Directory,弹出一个新建目录的窗口。先创建一个lauout的目录,在创建一个布局文件。因为版本问题,已经自动生成了一个布局文件。
接着回到 FirstAcitivity ,在onCreate()方法设置布局。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
1.3 注册活动
任何一个活动都需要在AndroidMainfest.xml中注册才能生效。因为我们是用Android Studio直接创建活动的,因此自动帮我们注册好了。但是如果是自己新建一个 Java Class则需要自己去注册。
不过注册了之后程序仍然是不能运行的,因为还没有为程序配置主活动。因此需要配置主活动,方法如下:在<activity>标签的内部加入<intent-filter>标签里添加 <actionandroid:name = "android.intent.action.MAIN"/>和<category android:name = "android.intent.category.LAUNCHER"/>这两句身声明即可。程序即可运行。
1.4 使用Toast.
这是一种提醒方式。在使用前,我们需要定义一个Toast的触发点。通过makeText()方法创建一个Toast对象,然后调用show方法。makeText()方法需要3个参数,第一个参数是Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象,因此直接传入活动本身即可,第二个参数是要显示文本的内容,第三个是显示的长短,有两个内置变量。
代码如下:
Button btn = findViewById(R.id.btn_1); //声明一个按钮,并且找到对应的id
btn.setOnClickListener(new View.OnClickListener() { //点击事件
@Override //采取匿名内部类来写
public void onClick(View view) {
Toast.makeText(FirstActivity.this,"You click me!", Toast.LENGTH_SHORT) .show();
//调用Toast 的makeTest方法。最后一定要记得show()
}
});
效果如图:
1.5使用Menu
先创建一个Main.xml文件添加一下代码:
<menu xmlns:android = "http://schemas.android.com/apk/res/android"> <item android:id="@+id/addItem" android:title="Add"/> <item android:id="@+id/removeItem" android:title="Remove"/> </menu>
接着回到FirstActiviy中来重写onCreateOptionsMenu()方法,重写方法可以使用ctrl+O快捷键寻找相应方法。
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu);//调用刚刚写的xml文件 return true; }
为菜单栏的选项增加相应的事件,代码如下
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.addItem: Toast.makeText(FirstActivity.this,"You click add",Toast.LENGTH_LONG ).show(); break; case R.id.removeItem: Toast.makeText(FirstActivity.this,"You click remove",Toast.LENGTH_SHORT ).show(); break; } return true; }
1.6销毁一个活动
增加finish()即可
2使用Intent在活动之间穿梭
2.1显示Intent
btn.setOnClickListener(new View.OnClickListener() { //点击事件 @Override //采取匿名内部类来写 public void onClick(View view) { Intent intent = new Intent(FirstActivity.this , SecondActivity.class); startActivity(intent);//执行intent } });
2.2隐式Intent
在AndroidMaifest.xml中在<activity>标签下配置<intent-filter>中的内容。在<action>标签中,指明了当前活动可以相应的action,要精确的指明了当前活动能够相应的intent中还可能带有的 <category>只有<action> 和 <category>中的内容同时能够匹配上Intent中制定的action 和category才可以响应。
2.3.向下一个活动传递数据
Intent 中提供了一系列putExtra()方法的重载,以吧我们先要的数据暂存在Intent中。比如,FirstActivity中有一个字符串,现在想把这个字符串传递到SecondActivty中,可以这样编写:
首先可以通过getIntent()方法获取用于启动SecondAcitity的Intent,然后调用getString Extra()方法 ,传入相应的键值,就可以得到相应的数据了。 不同的数据类型有不同的get方法,如果传递整形数据,使用getIntExtra()方法 以此类推。
FirstActivity代码:
public void onClick(View view) {
String data = "hello secondactivity!";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);//第一个参数是键,用于后面从Intent中取值,第二个参数才是真正传递的数据
startActivity(intent);
}
});
secondAcitivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent(); //获取Intent
String data = intent.getStringExtra("extra_data");//获取数据
Log.d("SecondAcitity",data);//打印消息
}
2.4返回数据给上一个活动
Activity中还有一个startAcitivtyForResult()方法也是用去启动活动,但这个方法期望在活动销毁的时候能返回一个结果给上一个活动。
startAcitivtyForResult()方法接受2个参数,第一个参数还是Intent,第二个参数是请求吗,用于在之后的回调中判断数据的来源。
【注意代码 可能有点问题!!!!】
【可能是写错一点东西了。 没有打印出消息】
FirstActivity
btn.setOnClickListener(new View.OnClickListener() { //点击事件 @Override //采取匿名内部类来写 public void onClick(View view) { Intent intent = new Intent(FirstActivity.this,SecondActivity.class); startActivityForResult(intent,1); //上面有这个方法的说明 } });
SecondAcitiy
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button btn2 = findViewById(R.id.btn_2); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("data_return","hello firstActivity"); //将数据暂存在data_return中 //setResult 接受2个参数,第一个参数用于向上一个活动返回处理结果 一般只使用 RESULT_OK //或RESULT_CANCELED 这两个值。第二个参数则把带有数据的Intent传递回去 setResult(RESULT_OK,intent); finish(); //销毁活动 } }); }
由于我们使用startActivityForResult()方法来启动SecondAcitivy中,在SecondAcitivy被销毁之后回调上一个活动的OnAcitivyResult()方法,因此我们需要在FirstActivity中重写这个方法来得到返回的数据。【可以利用ctrl+O快捷键寻找相应方法】
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 1: if(requestCode == RESULT_OK){ String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity",returnedData); } break; default: } }
onActivityResult有3个参数,第一个参数requestCode 是传入码。第二个参数resultCode 我们在返回数据时传入的处理结果。第三个参数 data 是携带者返回数据的Intent.
3活动的生命周期
3.1活动状态
①运行状态 ②暂停状态 ③停止状态 ④销毁状态
3.2活动生命周期【百度截了一张图】
后面 书上还有一些代码,就不贴了~~~~ 有点懒了
小结:大部分都是书上的原文啦。
所有的代码最好还是敲一下吧,毕竟只看书有点无聊吧。
推荐阅读
-
第一次记录Bootstrap table学习笔记(1)
-
Android学习笔记--使用剪切板在Activity中传值示例代码
-
Android学习笔记--通过Application传递数据代码示例
-
Android学习笔记--Activity中使用Intent传值示例代码
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
Android学习笔记(一)环境安装及第一个hello world
-
《第一行代码》读书笔记(六):CoordinatorLayout
-
两千行代码的PHP学习笔记汇总
-
温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 14 高级技巧
-
PHP学习笔记 (1) 环境配置与代码调试