第一行代码Android 【学习笔记1】

在创建项目时如果出现Error:Failed to resolve: com.android.support:appcompat-v7:27.+
<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活动生命周期【百度截了一张图】

后面 书上还有一些代码,就不贴了~~~~  有点懒了

 

小结:大部分都是书上的原文啦。 

所有的代码最好还是敲一下吧,毕竟只看书有点无聊吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值