android学习回顾--Activity活动

学习android也有一段时间,回顾总结一下;

创建Activity

  在创建项目的时候,Android Studio默认会让创建一个活动,先选择一个Activity模板,之后的创建过程跟手动的过程一样,这里选择Add No Activity创建一个空项目,以手动的方式添加一个活动;打开目录app/src/main/java/packagename,此时应该是空的,我们右键点击包,new->Activity->Empty Activity,会弹出创建活动的对话框,命名为FirstActivity,此时有三个选项,Generate LayoutFile(自动创建布局)、Launcher Activity(设置为项目主活动)、Backwarks compatibility(项目启用向下兼容模式),只勾选Backwarks compatibility,布局以及设置主活动之后手动进行,点击Finish完成创建。

  Android Studio自动创建了如下代码,任何Activity都应该重写onCreate,代码只是调用父类的onCreate方法,之后要加入我们自己的很多逻辑。

public class FirstActivity extends AppCompatActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
    }
}

  现在来创建加载布局,在app/src/main/res目录右键,new->Directory,会弹出一个新建目录的窗口,创建一个名为layout的目录,然后右键点击layout目录,选择Layout resource file,之后会弹出新建布局的窗口,命名为first_layout,点击ok完成新建。修改first_layout的内容,添加一个Button。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"> 
    <Button
        android:id="@+id/button_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button 1" 
        />
</LinearLayout>

  修改FirstActivity的代码,使用setContentView方法加载布局,如下所示:

public class FirstActivity extends AppCompatActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.first_layout);
    }
}

   所有活动都要在AndroidManifest.xml中注册,打开app/main/AndroidManifest.xml,在Application中已经有FirstActivity的注册了,Android Studio在创建活动的时候帮我们注册了,在<application>标签中使用<activity>标签注册活动,android:name指定具体注册哪一个活动,最后还要配置项目的主活动,项目才能跑起来,在<activity>标签中加入<intent-filter>标签声明action category即可,如下所示:

  <intent-filter>
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>

  至此活动可以顺利启动了。

在活动中使用Toast,代码如下:

public class FirstActivity extends AppCompatActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout); 
        Button btn = (Button)findViewById(R.id.button_1) ;
        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this,"hello",Toast.LENGTH_SHORT).show(); 
            }
        });
    }
}

调用finish()方法可以销毁活动。

使用Intent在活动中穿梭

  创建另一个活动SecondActivity,使用自动生成布局文件,Intent是android各组件之间进行交互的重要方式,分为显式Intent和隐式Intent,修改FirstActvity的代码,传入FirstActivity.this作为上下文,传入SecondActivity.class作为启动目标,意图明显,为显示Intent,代码如下:

public class FirstActivity extends AppCompatActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout); 
        Button btn = (Button)findViewById(R.id.button_1) ;
        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {  
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class); 
                startActivity(intent);
            }
        });
    }
}

  隐式Intent通过指定一系列更为抽象的action、category信息,交由系统分析这个Intent,找出合适的活动启动,修改AndroidManifest.xml,为活动SecondActivity配置action、category,action只能配置一个,category可以配置多个,之后修改FirstActivity,代码如下:

 <activity
            android:name=".SecondActivity"
            android:label="This is SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" /> 
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
 </activity>
public class FirstActivity extends AppCompatActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout); 
        Button btn = (Button)findViewById(R.id.button_1) ;
        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {  
                Intent intent = new Intent("com.example.yujj.activitytest.ACTION_START");
                //intent.addCategory("com.example.activitytest.MY_CATEGORY");
          startActivity(intent);
            }
        });
    }
}

隐式Intent的更多应用

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));

传递数据

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data","hello world");
startActivity(intent);

接收数据

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");

返回数据给上一个活动

FirstActivity:
  Intent intent = new Intent(FirstActivity.this,SecondActivity.class); 
  startActivityForResult(intent,1);

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode)
        {
            case 1:
                if(resultCode == RESULT_OK) {
                    String returndata = data.getStringExtra("data_return");
                    Log.d(TAG, returndata);
                }
                break;
            default:
        } 
    }


SecondActivity:
  Button btn = (Button)findViewById(R.id.button_2);
  btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","hello FirstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
  });

 

posted @ 2017-08-21 16:20  小鱼-  阅读(198)  评论(1编辑  收藏  举报