扣丁学堂Activity【源码下载】
一丶课堂代码演示效果:
1.传递消息 2传递对象 3获取返回值+打电话
二丶代码讲解
(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保存数据下节再讲
后面会提高学习速度,参考别人的学习方法以及博客形式,希望后面会跟好