Android学习笔记
第一节
Android的四大组件:activity
一、activity
activity的 三种状态:运行态、停止状态和暂停态。
activity的生命周期的七个方法:
activity的常见操作:
activity之间的数据传递:
第一种方法:在主activity中
Intent i = new Intent(MainActivity.this, Aty1.class);
i.putExtra("txt", "Hello Aty1");
在另外一个activity中
tvOut = (TextView) findViewById(R.id.tvOut);
tvOut.setText(getIntent().getStringExtra("txt"));
第二种方法:
在主activity中:
Bundle data = new Bundle();
data.putString("txt", "Hellow Aty1");
i.putExtras(data);
在第二个activity中:
//第二种方法传递数据
Bundle data = getIntent().getExtras();
String txt = data.getString("txt");
tvOut.setText(txt);
如何取得第二个activity中传回的数据:
在第二个activity中使用:
首先:设置结果的数据-
Intent i = new Intent();
i.putExtra("result", "Hellow MainActivity");
setResult(0,i);
在第一个activity中:protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
tvOut.setText(result);
super.onActivityResult(requestCode, resultCode, data);
}
Android的四大组件之一:Service
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnStartService:
startService(serviceIntent);
break;
case R.id.btnStopService:
stopService(serviceIntent);
break;
}
}
绑定服务:
public IBinder onBind(Intent arg0) {
System.out.println("onBind");
return echoServiceBinder;
}
private final EchoServiceBinder echoServiceBinder = new EchoServiceBinder();
public class EchoServiceBinder extends Binder{
}
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("OnServiceConnected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
startService启动的服务在销毁掉当前的activity时服务不会被停止掉,而通过bindService启动的服务销毁掉当前的activity时服务也会被停止掉。
Android的四大组件之一:broadcast receiver
Android为我们提供的一个组件和组件之间通讯的机制。不仅仅可以在应用程序内部之间通讯,而且可以跨应用通讯。
public class MyBC extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceive");
}
}
sendBroadcast(new Intent(MainActivity.this,MyBC.class));
动态注册和注销
broadcast receiver
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSendBroadCast = (Button) findViewById(R.id.btnSendBroadcast);
btnSendBroadCast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent i = new Intent(MainActivity.this,MyBC.class);
Intent i = new Intent(MyBC.ACTION);
i.putExtra("txt", "hello Liheng");
sendBroadcast(i);
}
});
btnRegBCR = (Button) findViewById(R.id.btnRegBCR);
btnRegBCR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerReceiver(mybc, new IntentFilter(MyBC.ACTION));
}
});
btnUnRegBCR = (Button) findViewById(R.id.btnUnRegBCR);
btnUnRegBCR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
unregisterReceiver(mybc);
}
});
}
private final MyBC mybc = new MyBC();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public static final String ACTION = "cn.eoe.usingbc.intent.action.MyBC";
Android四大组件之:contentprovider
使用contentProvider读取其它的应用程序公开的数据:
获取联系人列表:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (c.moveToNext()) {
System.out.println(">>>>>>>>" + c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Android的应用核心intent
intent是一个与基本组件相关联的数据对象。
intent用来指定要启动的目标组件。
intentFilter类似于网页的url,用来对intent进行过滤。
显示intent和隐式intent
启动一个activity:
方法一:通过传递即显式intent
ComponentName("cn.eoe.intents","cn.eoe.intents.Aty1")
findViewById(R.id.btnStartAty1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent();
//启动一个intent 利用setcomponent();
i.setComponent(new ComponentName("cn.eoe.intents","cn.eoe.intents.Aty1"));
startActivity(i);
}
});
隐式intent启动一个activity:
在mainfest中配置:
<activity android:name="Aty1">
<intent-filter >//给activity指定一个地址。
<action android:name="cn.eoe.intents.intent.action.Aty1"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
findViewById(R.id.btnStartAty1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*Intent i = new Intent();
//启动一个intent 利用setcomponent();
i.setComponent(new ComponentName("cn.eoe.intents","cn.eoe.intents.Aty1"));*/
Intent i = new Intent("cn.eoe.intents.intent.action.Aty1");
startActivity(i);
}
});
第二篇
Android的界面布局
FrameLayout
LinearLayout
RelativeLayout
Tabl
eLayout
AbsoluteLayout(已被弃用)
Android用户界面之常用控件ListView
创建一个ListView
private ListView lv;
private ArrayAdapter<String> adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);//采用系统的列表项
lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(adapter);
adapter.add("Hello");
adapter.add("eoe");
adapter.add("liheng");
自定义一个列表项
如果是arrayAdapter其相应的布局应该是TextView
adapter = new ArrayAdapter<String>(this, R.layout.list_cell);
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</TextView>