註冊activity就是確定絕對目錄。
創建搜索界面
註冊activity
做界面
Edittext msearch
Listview mlv
將數據庫查詢的數據封裝到map中
自定義適配器。???
對數據庫的操作層
1. 在XXXDao.java文件中修改查詢方法的返回值爲List<Map<String, Object>>
2. 聲明並初始化一個List<Map<String,Object>>類型的以map爲單位的list
3. 聲明並初始化一個Map<String,Object> map=new TreeMap<String, Object>();
4. 給map集合添加數據。
map.put("id",id);
map.put("name",name);
map.put("cuisine",cuisine);
map.put("material",material);
map.put("ingredient",ingredient);
map.put("picpath",picpath);
map.put("cookingstep",cookingstep);
map.put("videopath",videopath);
map.put("audiopath",audiopath);
5. 將map添加到list中:list.add(map);
6. 修改返回值:return list;
代碼如下:
//根據條件查詢——>name
publicList<Map<String,Object>> selectedByName(String name){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
openDB();
String sql="name like'%"+name+"%'";
Cursor c=db.query("food",null, sql, null,null, null,null);
if(c!=null){
while (c.moveToNext()) {
int id=c.getInt(c.getColumnIndex("id"));
String name1=c.getString(c.getColumnIndex("name"));
String cuisine=c.getString(c.getColumnIndex("cuisine"));
String material=c.getString(c.getColumnIndex("material"));
String ingredient=c.getString(c.getColumnIndex("ingredient"));
String picpath=R.drawable.ic_launcher+"";
// Stringpicpath=c.getString(c.getColumnIndex("picpath"));
String cookingstep=c.getString(c.getColumnIndex("cookingstep"));
String videopath=c.getString(c.getColumnIndex("videopath"));
String audiopath=c.getString(c.getColumnIndex("audiopath"));
Map<String,Object> map=new TreeMap<String, Object>();
map.put("id",id);
map.put("name",name);
map.put("cuisine",cuisine);
map.put("material",material);
map.put("ingredient",ingredient);
map.put("picpath",picpath);
map.put("cookingstep",cookingstep);
map.put("videopath",videopath);
map.put("audiopath",audiopath);
list.add(map);
// System.out.println(id+"---"+name1);
}
}
closeDB();
return list;
}
}
實時動態檢索
在SearchActivity.java文件中,
1. 聲明組件,及需要的數據
private EditTextmSearch;
private ListViewmLv;
privateDao dao;
privateList<Map<String,Object>> data;
privateString[] from={"picpath","name"};
privateint []to={R.id.search_item_img,R.id.search_item_tv};
2. 在onCreate()方法中設置綁定佈局。
setContentView(R.layout.activity_search);
3. 初始化組件
mSearch=(EditText)findViewById(R.id.search_edtx);
mLv=(ListView)findViewById(R.id.listView1);
data=newArrayList<Map<String,Object>>();
dao=new Dao(this);
4. 給mSearch的TextView添加addTextChangedListener()方法
onTextChanged(CharSequence s, int arg1, int arg2,int arg3){
String name=s.toString();
//獲取text字符串àname中
if(name.length()>0){
data=dao.selectedByName(name);
//調用dao中的selectedByName方法通過name對SQLite進行查找,並將數據返回給data的list,map
SimpleAdapter adapter=newSimpleAdapter(SearchActivity.this,data,R.layout.search_item,from,to);
//創建adapter
mLv.setAdapter(adapter);
//給組件綁定adapter
}
ListView的單擊事件
點擊listview觸發事件:綁定單擊監聽器:setOnItemClickListener,參數new OnItemClickListener,導入包,然後重寫方法。
在publicvoidonItemClick(AdapterView<?> parent, View view,intposition,long id)方法中設置意圖:
Intent it=newIntent(SearchActivity.this,DetailsActivity.class);
startActivity(it);
listview裏的編號從0開始,和數組一致。
Toast.makeText(SearchActivity.this, position+"", Toast.LENGTH_SHORT);
多媒體:音頻和視頻的播放
MediaPlayer 播放音頻(其實既能音頻又能視頻)不隨着activity釋放而終止。
生命週期:
Reset()方法:音樂資源重置。
Release()方法:整個mediaPlayer資源釋放。
setDataSource():設置你要播放歌曲的路徑。
Prepare()方法:準備狀態。
Start方法:播放
Paused方法:暫停,
Stop方法:停止
給MediaPlayer組件加OnCompletionListener監聽器,音樂播放完畢,釋放資源
//綁定監聽器:處理歌曲播放完畢的事件
player.setOnCompletionListener(newOnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayermp) {
player.reset();
}
});
給Button綁定【播放音頻】功能
1. XxxActivity.java中implements OnClickListener
publicclass MainActivity extends Activityimplements OnClickListener
2. private ButtonmPlay,mPause,mStop;
3. publicvoid onClick(Viewv)
switch(v.getId()){
case R.id.play:
//綁定音頻資源
break;
case R.id.pause:
break;
case R.id.stop:
break;
}
4. 初始化組件,設置點擊監聽器。
mPause=(Button)findViewById(R.id.pause);
mPlay=(Button) findViewById(R.id.play);
mStop=(Button) findViewById(R.id.stop);
mPause.setOnClickListener(this);
mStop.setOnClickListener(this);
mPlay.setOnClickListener(this);
5. 聲明MediaPlayer變量,path路徑
private MediaPlayerplayer;
private Stringpath="/mnt/sdcard/chuanqi.mp3";
6. 初始化MediaPlayer
player=new MediaPlayer();
7. 給player綁定音頻資源,添加try模塊——(寫在OnCreate方法中)
player.setDataSource(path);,
//準備播放
player.prepare();
8. 在case中添加播放
case R.id.play:
//播放
player.start();
break;
9. 在case中添加暫停
case R.id.pause:
if(player.isPlaying()){
player.pause();
}
break;
10. 在case中添加停止,並重新加載和綁定音頻資源
case R.id.stop:
if(player.isPlaying()){
player.stop();
}
player.reset();
//綁定音頻資源
player.setDataSource(path);
//準備播放
player.prepare();
綁定資源庫:
1. Ctrl+鼠標左鍵點擊:Button
2. attachsource-> external location à external folder:
3. 找到本機sources文件所在地,指向路徑:
path :D:/adt-bundle-windows-x86-20131030/sdk/sources
4. OK
準備音頻資源:推入模擬器的sdk裏,注意名字不能是中文!!!
DDMS:選中左側啓動的模擬器。
MntàSDCard->選中sdcard:選中push a file onto the device。
視頻播放VideoView組件
支持播放:mp4,一般超過28M的視頻播放失敗,內存爆掉
創建VideoActivity.java文件
1. 聲明私有變量
privateVideoViewmVideo;
private Stringpath;
private MediaControllercontroller;
2. 初始化
mVideo=(VideoView) findViewById(R.id.videoView1);
3. 綁定視頻資源
//綁定視頻資源
path="/mnt/sdcard/lantingxu.mp4";
mVideo.setVideoPath(path);
4. 創建媒體控制條
//創建媒體控制條
controller=newMediaController(VideoActivity.this);
5. 綁定控制條
//綁定控制條
mVideo.setMediaController(controller);
6. 播放視頻
//播放視頻
mVideo.start();
7. 播放完畢之後處理:交給OnCompletionListener處理
//播放完畢之後處理:交給OnCompletionListener處理
mVideo.setOnCompletionListener(new OnCompletionListener(){
@Override
publicvoidonCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mVideo.stopPlayback();
}
});
遇到adb失去聯繫的情況!!!
在windows資源管理器,結束adb.exe進程樹,然後重新在DDMS左邊,reset adb
關於音頻播放的Activity頁面跳轉之後返回的操作。
OnPause()方法
protectedvoid onPause() {
//TODO Auto-generatedmethod stub
super.onPause();
if(player.isPlaying()){
player.stop();
player.reset();
}
player.release();
//將mediaplay釋放掉。onCreate方法,在一個actuvity的生命週期中只有一次。再次回來,進入resume生命週期,而非oncreate
}
OnResume()方法
@Override
protectedvoid onResume() {
//TODO Auto-generatedmethod stub
super.onResume();
if(player==null){
player=new MediaPlayer();
try {
//綁定音頻資源
player.setDataSource(path);
//準備播放
player.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
}
實例代碼:
publicclass AudioController {
privateMediaPlayer play;
public AudioController() {
super();
this.play = new MediaPlayer();
this.play.setOnCompletionListener(new OnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
play.reset();
//播放完畢將歌曲資源重置
}
});
}
publicvoid load(String path){
try {
play.setDataSource(path);
play.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
//播放的控制
//播放
publicvoid play(String path){
load(path);
play.start();
}
//暫停
publicvoid pause(){
if(play.isPlaying()){
play.pause();
}
}
//停止
publicvoid stop(){
if(play.isPlaying()){
play.pause();
play.stop();
}
play.reset();
// play.release();
// play=null;
}
//退出方法:將整個mediaplay資源釋放
publicvoid exit(){
play.release();
play=null;
}
}