1.这个方法是弹出一个Toast,信息一段时间后消失,不占用频幕空间
public void onClick(View v) {
// TODO 自动生成的方法存根
Toast.makeText(MainActivity.this, “you clicked button 1”, Toast.LENGTH_SHORT).show();
2.程序的步骤:
用findViewById初始化控件; 用setOnClickListener设置监听;再监听里调用方法,方法为public void onClick(View v) {
// TODO 自动生成的方法存根
这里写代码实现方法
}
以上是控件的实现,下面是菜单的实现(系统内置了菜单,调用就行了):
public boolean onCreateOptionsMenu(Menu menu){
这里写方法
return true;
}
3.显式intent方法: Intent intent=new Intent(MainActivity.this(注意:这个是Context参数启动活动的上下文),SecondActivity.class(注意:这个是class参数,指向哪个活动,是目标));
startActivity(intent);这个是启动intent
4. .隐式intent方法:在AndroidManifest.xml配置action的值和category的值,写Intent intent=new Intent(Intent.ACTION_VIEW); ACTION_VIEW为系统内置动作
intent.setData(Uri.parse(“http://hao123.com“)); Uri.parse方法将网址(字符串)解析成Uri对象,在调用setdata方法将Uri对象传进去,从而调用网址好123,不过也要配置data标签,;
如何调用系统的电话:代码:Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(“tel:10086”));//配置的配置文件了
5.向下一个活动传递数据:第一个活动:定义要传入的数据String data=”11111”;Intent intent(.this,.class);//创建intent;intent.putExtra(传入的数据自命名,data(也就是1111)),这是调用putExtra方法存入数据到intent;startActivity(intent):启动intent;第二个活动:Intent intent=getIntent();取出存入的数据;String data=intent.getStringExtra(“之前存入数据的名字”)
6.返回数据给上一个活动:在第一个活动,startActivityForResult()启动,它接收两个参数,一个参数是intent,另一个参数是请求码,用以回调中判断数据的来源;第二个活动:调用非常重要的方法setResult()它接收两个参数,一个参数是用于上一个活动的返回处理结果,一般用RESULT_OK或RESULT_CANCELED,第二个参数是带有数据的Intent传递回去,再调用Finish销毁当前活动;onActivityResult()方法带有三个参数,第一个参数是requestCode为请求活动时的请求码,第二个参数是resultCode为返回数据传入的处理结果,第三个参数是data携带返回数据的intent
7.活动与活动之前的联系用Intent intent=new Intent();如何设置对话框模式:在AndroidManifest.xml文件里,在需要的活动的activity加上代码android:theme=”@android:style/There.Dialog”; android:theme属性是定制当前活动的主题的,系统有很多主题,也可以定制自己的主题,style/There.Dialog指的就是对话框
8.在一个活动中保存数据,防止活动回收之前调用,具体代码如下:
定义一个方法:
protected void onSaveInstanceState(Bundle outState){//保存数据
super.onSaveInstanceState(outState);
String tempData=”Something you just typed”;
outState.putString(“data_key”, tempData);
}
代码解释:onSaveInstanceState()会携带一个Bundle类型的参数(比如说putString,putInt)用于保存数据,putString需要传入两个参数,第一个参数是键,用于后面从Bundle取值,第二个参数是真正要保存的内容。
如何取出数据:具体代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, “Oncrete”);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null){
String tempData=savedInstanceState.getString(“data_key”);
Log.d(TAG, tempData);
}
代码解释:onCreate也有Bundle的参数,可以取回相应的参数;可以结合Bundle和intent传递数据:先把需要传递的数据保存在Bundle对象中,再将Bundle对象存放在Intent里,到了目标活动之后,先从Intent取出Bundle,再从Bundle一一取出数据
9.注册监听器的另一种方法:privare Button button;
Button=(Button)findViewById(R.id.button)
Button.setOnClickListenter(this);
Public void onClick(View v){
Switch(v.getId()){
Case R.id.button://在这个添加逻辑
break;
default:
break;
}
}
10.知晓当前是哪个活动:新建个BaseActivity继承Activity,然后重写onCreate方法,Log.d(“BaseActivity”, getClass().getSimpleName());,然后所有项目都继承BaseActivity,最后再查看日志,就知道当前活动了。
11.随时随地退出程序:创建一个集合类ActivityCollector对所有活动进行管理:
public class ActivityCollector {
public static List activities=new ArrayList();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
}
调用时直接调用:ActivityCollector.finishAll();
11启动活动的最佳写法:
假如SecondActivity需要两个非常重要的参数,启动SecondActivity必须要传递过来,则是这样写:public static void actionStart(Context context,String data1,String data2){
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra(“param1”, data1);
intent.putExtra(“param2”, data2);
context.startActivity(intent);
}
然后在SecondActivity的Button1控件里加下如下代码(控件的初始化就不写出来了):SecondActivity.actionStart(FirstActivity.this,”data1”,”data2”)
代码解释:添加了一个actionStart()方法,需要的数据都是通过actionStart()的参数传递过来。
12.AlertDialog的用法:
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle(“这是个Dialog”);
dialog.setMessage(“Something importtant.”);
dialog.setCancelable(false);
dialog.setPositiveButton(“OK”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO 自动生成的方法存根
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO 自动生成的方法存根
}
});
dialog.show();
13.listView的用法:1.提供数据:private String[] data={“Apple”,”Banana”,”Orange”,”Watermelon”,”Pear”,”Grape”,”Pineapple”,”Strawb”,”Cherry”};
2.借助适配器之一的ArrayAdapter: ArrayAdapter adapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,data);
ListView listView=(ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
14.提升ListView的运行效率,getView()方法中有一个convertView参数,可以用于将之前加载好的布局进行缓存,以便日后重用.代码如下:if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId, null);
}else{
view=convertView;
}
还有一步优化:新增一个内部类ViewHolder,用于对控件的缓存,先通过findViewById找到控件,然后通过view.setTag(ViewHolder)就将ViewHolder储存在View中,可以通过viewHolder=(ViewHolder) view.getTag();取出
ListView的监听器是setOnItemClickListener
15.碎片与活动之间进行通信:
(1)活动中调用碎片的方法:RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);//调用FragmentManager的findFragmentById()方法
(2)碎片中调用活动的方法:MainActivity activity=(MainActivity)getActivity();
16.动态注册广播:1.定义一个内部类NetworkChangeReceiver继承BroadcastReceiver 2.
创建一个IntentFilter实例:intentFilter=new IntentFilter(); 3.给他添加个android:net.conn.CONNECTIVITY_CHANGE的action的值;4.创建NetworkChangeReceiver的实例,再调用registerReceiver()方法进行注册,将NetworkChangeReceiver的实例和InterFilter的实例都传进去,这样NetworkChangeReceiver就会收到广播;最后一定要记得动态注册的广播一定要取消注册才行;如何静态注册广播:1.首先新建个类,让它继承BroadcastReceiver;2.在AadroidManifest.xml里注册:
不过记得不管是静态还是动态注册都要注册开通权限
17.自定义广播:1.新建个类BroadcastReceiver,onReceiver里写逻辑2.在androidManifest进行注册,广播名写自定义的广播名: 3.在MainAcitivty写代码:Intent intent=new Intent(“com.example.broadcasttest.MY_BROADCAST”)
.
18.发送自定义的标准广播:Intent intent=new Intent(“com.example.broadcasttest.MY-BROADCAST”);sendBroadcast(intent);
发送有序广播:Intent intent=new Intent(“com.example.broadcasttest.MY-BROADCAST”);sendOrderedBroadcast(intent,null); sendOrderedBroadcast接收两个参数,第一个参数是intent,第二个参数是一个与权限相关的字符串,这里传入null;然后在andoridMainifest设定广播的接受顺序:
这里将MyBroadcastReceiver的优先级设定为100,保证在AnotherBroadcastReceiver之前收到广播,android:priority=”100”;获得了广播的优先权,可以进行截断,在优先级的广播的onReceive()方法中加入adortBroadcast();就可以截断了,广播就不会向下传播
19.使用本地广播:和动态注册广播的代码差不多,只不过现在首先通过LocalBroadcastManager的getInstance()方法得到它的一个实例,注册广播接收器时调用LocalBroadcastManagr的registerReceiver()方法,发送广播时调用的是LocalBroadcastManager的sendBroadcast()方法
20.使用事物:调用SQLiteDatabase的beginTransaciton方法开启一个事物,然后在一个异常捕获的代码块中执行具体的操作,当所有的操作都完成之后,调用setTransactionSuccessful()表示事物已经执行成功了,最后在finally中执行结束事物endTransaction
21.内容提供器:ContentResolver的基本用法:ContentResolver的增删查改需要一个参数Uri,它由两部分组成,权限+路径;权限可以用包名命名,如com.example.app,路径为表名,如table1,所以URI的标准写法为: content://com.example.app.provider/table1;得到URI字符串之后,需要解析成Uri对象才能作为参数传入,调用Uri.parse()方法,如:Uri uri=Uri.parse(“cpntent://com.exaple.app/table1”),查询table1中的数据代码如下:
Cursor cursor=getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);代码解释:uri指定查询某个应用程序下的某一张表,projection指定查询的列名,selection指定where的约束对象,selectionArgs为where的占位符提供具体的值,sortOrder指定查询结果的排序方式;查询完成后返回的是一个Cursor对象,这样就可以将数据从Cursor对象读取出来了;可以使用通配符的方式匹配两种格式的URI:表示匹配任意长度的任意字符是: ,表示匹配任意长度的数字是#: ,所以匹配任意表的内容URI格式可以写成:content://com.example.app.provider/ ,匹配任意一行数据的内容的URI格式可以写成:content://com.example.app.provider/table1/# ,借助UriMatcher这个类就可以轻松匹配内容URI的功能,UriMatcher的addURI()方法接收三个参数:可以把权限,路径,和一个自己定义的代码传进去,当调用UriMatcher的match()方法时,可以将一个uri对象传进去,回值是能够匹配这个URI对应的自定义代码…………..getType()方法讲解:获取Uri对象所对应的MIME类型,一个URI对应的MIME字符串注要由三部分组成:1.必须以vnd开头2.如果内容URI以路径结尾,后接android.cursor.dir/ ,如果内容URI以id结尾,则后接android.cursor.item/ 3.最后接上vnd.所以对content://com.exaple.app.provider/table1这个内容的URL对应的类型可以写成:vnd.android.cursor.dir/vnd.com.example.app.provider.table1 ;在AndroidManifest里注册,,,,,name指定该类的全名,authorities指定该内容的权限,exported指定该内容提供器是可以被其它程序访问的
22.使用通知:1.先获取NotificationManaget对通知进行管理:NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
代码解释:getSystemService()需要接收一个字符串参数用于确定获取的是哪个服务;
2. 再学会创建一个Notification对象:Notification notification(R.drawable.icon,”This is ticker text”, System.currentTimeMillis());代码解释:notification接收三个参数,第一个是用于指定通知的图片,第二个参数指定通知的提示信息,第三个参数指定通知被创建的时间
3.然后对通知的布局进行设定:notification.setLatestEventInfo(context,”This is content title”,”This is content text”,null);代码解释:调用setLatestEventInfo方法,它需要四个参数:第一个参数Context,第二个参数是指定通知的标题内容,第三个参数是指定通知的正文内容,第四个参数暂时用不到,传入NULL
4.调用notify()方法让通知显示出来:manager.notify(1,notification);代码解释:notify接收两个参数:第一个参数是id,用以保证每个通知指定的id都是不同的,第二个参数是Notification对象,把刚才创建好的放进去即可
5.点通知的时候可以让它跳转到另一个页面,也就是构建通知的意图,用PendingIntent的getAtivity()方法,它需要传进四个参数:第一个参数是Content,第二个参数一般用不到,传入0;第三个参数是一个Intent对象,第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四种值可选
6.如何取消通知:manager.cancel(1);代码解释:调用cancel,取消,需要传入一个参数id,这个id其实就是之前通知设置的id,也就是manager.notify(1,notification);
23.通知的高级应用(调用notification的类):
1设置通知的声音(使用sound属性):假如手机下有个音频文件,可以这样设置:Uri soundUri=Uri.fromFile(new File(“system/media/audio/ringtones/Basic_tone.ogg”));
Notification.sound=soundUri;
2.设置通知的震动(使用vibrate属性):long[] vibrates={0,1000,1000,1000};//这是一个数据,设置手机静止的时长,手机震动的时长;然后notification.vibrate=vibrates;最后记得声明权限: