扣丁学堂——Activity(二)

扣丁学堂Activity【源码下载】

一丶课堂代码演示效果:

1.传递消息                                                              2传递对象                                                            3获取返回值+打电话

扣丁学堂——Activity(二)_第1张图片扣丁学堂——Activity(二)_第2张图片

丶代码讲解

(1)Activity值传递,两种方法

1.直接使用Bundle对象来传递

2.使用Intent定义的Bundle对象(也用两种)

(2)Activity处理返回值

还是直接上代码,注释讲解

Demo1

xml很简单三个按钮并定义三个单击事件(代码请参考源代码)

Main.Activity

public class Main2Activity extends AppCompatActivity {
    private EditText editText_info;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        editText_info=(EditText)findViewById(R.id.editText_info);
    }

    //序列化io传值(消耗资源比较大)
    public void sendObjClick(View v){
        //要传递的对象
        Cat cat=new Cat();
        cat.name="咪咪";
        cat.age=2;
        cat.type="加菲";

        Intent intent =new Intent(this,Main22Activity.class);
        intent.putExtra("cat", cat);
        startActivity(intent);


    }
    //Android提供的方法
    public void sendObj2Click(View v){
        Dog dog=new Dog();
        dog.name="哈哈";
        dog.age=2;
        dog.type="哈士奇";
        Intent intent =new Intent(this,Main22Activity.class);
        intent.putExtra("dog",dog);
        startActivity(intent);

    }

    /*
     *启动Activity22,并传递数据
     */
    public void sendClick(View v){
        //创建一个意图(想干什么)参数:上下文,要跳转的组件的字节码
        Intent intent=new Intent(this,Main22Activity.class);

        String info =editText_info.getText().toString();
        //封装传递数据
        //方法一
//        Bundle data =new Bundle();
 //       data.putString("info",info);
 //       intent.putExtra("data",data);
        //方法二
        intent.putExtra("info",info);


        startActivity(intent);

    }

}
cat.java

//实现可序列接口方便后期接收
public class Cat implements Serializable {
    String name;
    int age;
    String type;

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", type='" + type + '\'' +
                '}';
    }
}
Dog.java

//实现Android里传递值的“打包”
public class Dog implements Parcelable{
    String name;
    int age;
    String type;




    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", type='" + type + '\'' +
                '}';
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeString(type);

    }
    //API显示必须实现的
    //对象的创建器
    public static final Parcelable.Creator<Dog> CREATOR  =new Parcelable.Creator<Dog>(){
        public Dog createFromParcel(Parcel in){
            Dog dog=new Dog();
            dog.name=in.readString();
            dog.age=in.readInt();
            dog.type=in.readString();
            return dog;
        }

        @Override
        public Dog[] newArray(int size) {
            return new Dog[0];
        }


    };
}
接受Activity

xml就一个TextView(代码略)

Activity2(接受数据)

public class Main22Activity extends AppCompatActivity {
    private TextView textView_info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);
        textView_info=(TextView)findViewById(R.id.info);
        Intent intent=getIntent();
        //对应方法一
//        Bundle data=intent.getBundleExtra("data");
//        String info=data.getString("info");
        //对应方法二
//        String info=intent.getStringExtra("info");
        //接收可序列值,变向接收一个对象
//        Cat cat=(Cat) intent.getSerializableExtra("cat");
        Dog dog=intent.getParcelableExtra("dog");
//        textView_info.setText(info+"\n"+cat.toString());
        textView_info.setText(dog.toString());
    }
}
Demo2

MainActivity.xml很简单,一个EditText两按钮两单击事件(代码略)

MainActivity

public class MainActivityResult extends AppCompatActivity {
    private EditText editText_number;
    private static final int REQUEST_1=0x1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity_result);
        editText_number=(EditText)findViewById(R.id.editText_number);
    }
    /*
    选择一个电话号码
     */
    public void selectClick(View v){

        Intent intent=new Intent(this,PhoneNumberListActivity.class);
        //要返回结果请求结果
        startActivityForResult(intent,REQUEST_1);

    }
    //重写该方法处理返回结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==REQUEST_1&&resultCode==RESULT_OK){
            String number=data.getStringExtra("number");
            editText_number.setText(number);
        }
    }
    /*
        拨打电话
         */
    public void callClick(View v){
        String number=editText_number.getText().toString();
        Intent intent=new Intent();
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:"+number));
        startActivity(intent);
    }
}
Activity2

public class PhoneNumberListActivity extends AppCompatActivity {
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone_number_list);
        listView=(ListView)findViewById(R.id.listView);
        final String[] numbers= {"18871465782","1894444377","13517192472","13517193322","13517192352"};
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(
                this,android.R.layout.simple_list_item_1,android.R.id.text1,numbers
        );
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String number=numbers[position];
                Intent intent=new Intent();
                intent.putExtra("number",number);
                setResult(RESULT_OK,intent);//设置返回结果
                finish();//结束当前界面
            }
        });
    }
}
这里涉及到拨打电话,涉及到了权限问题,所以应该在 manifests文件添加一句

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

三丶Android屏幕运行方向

(1)<activity > 节点的 android:screenOrientation 属性可以完成该项任务android:screenOrientation="portrait">// 竖屏 , 值为 landscape时为横屏

(2)模拟器快捷键:Ctrl+F11/F12,也可通过代码实现,如下:
SetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

(3)设置Activity全屏
在onCreate添加代码实现:
//设置全屏模式getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)//去除标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);

将activity设置为窗体模式

  android:theme="@android:style/Theme.DeviceDefault.Dialog"

(4)屏幕方向自动切换代码.......

这里就先说到这里关于屏幕切换以及SharedPreferences保存数据下节再讲

后面会提高学习速度,参考别人的学习方法以及博客形式,希望后面会跟好


你可能感兴趣的:(源码,android,Activity,Studio,扣丁学堂)