在主界面即播放列表,点击item,会发生切换界面。可是,为什么解决不了?求解释。还有一个问题,为什么一定要写OnClickListener()方法,才可以播放音乐?
package hahaha.com.activity;import java.io.IOException;
import java.sql.Date;
import java.util.Timer;
import java.util.TimerTask;public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private ListView mListView;
private SlidingDrawer slidingDrawer ; // 定义SlidingDrawer

private ImageView handle;
//歌曲数据库
Cursor cur;
// 声明改变TextView内容的线程
//TimeThread th;
// 控制线程
public boolean b = true;
// 线程
boolean suspendFlag = false;

// 消息队列
private static final int msgKey1 = 1; // 显示歌名的控件
private TextView showmusic;
// 控制音乐按钮
private ImageButton play;
private ImageButton stop;
private ImageButton lastb;
private ImageButton nextb;
private Button btn; // 显示歌的总时间
private TextView endtime;
// 时间进度
private TextView showtime;
// 进度条
private SeekBar sbar; // 时间表
private Timer mTimer;
// TimerTask类代表一个任务,在指定的时间运行。一次或多次,可以运行任务
private TimerTask mTimerTask;
// 获取列表的position
private int getlistpos = 0; private int position;
// 获取歌曲的总时间
private String getendtime;
private int endtimes;
private boolean isChanging = false;// 互斥变量,防止定时器与SeekBar拖动时进度冲突
private String musicpath;
Intent intent;    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        
        // 创建MediaPlayer
mediaPlayer = new MediaPlayer();
showmusic = (TextView) findViewById(R.id.music);
        


// 控制歌曲的按钮
play = (ImageButton) findViewById(R.id.play);
stop = (ImageButton) findViewById(R.id.stop);
lastb = (ImageButton) findViewById(R.id.last);
nextb = (ImageButton) findViewById(R.id.next);
btn = (Button)findViewById(R.id.btn);

        slidingDrawer = (SlidingDrawer)findViewById(R.id.slidingdrawer);
handle = (ImageView)findViewById(R.id.handle);

// 设置监听器
play.setOnClickListener(listener);

stop.setOnClickListener(listener);
lastb.setOnClickListener(listener);
nextb.setOnClickListener(listener); initmusiclist();
initshowmusic();

        this.slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {

public void onDrawerOpened() {
handle.setImageResource(R.drawable.ico_right) ;

}
}) ; // 设置监听
this.slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {

public void onDrawerClosed() {
handle.setImageResource(R.drawable.ico_left) ; // 窗口关闭监听

}
}) ; // 设置监听
            private void initshowmusic(){
cur.moveToPosition(getlistpos);
showmusic.setText(cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));

}
    
     private Button.OnClickListener listener = new Button.OnClickListener() { public void onClick(View v) {
switch (v.getId()) {
// 播放
case R.id.play: if (musicpath == null) {
// Toast.makeText(getApplicationContext(), "没有播放歌曲!请到列表选歌播放!",
// Toast.LENGTH_SHORT).show();
play(); } else {
mediaPlayer.start();
//th.setResume();
play.setVisibility(View.GONE);
stop.setVisibility(View.VISIBLE);
}
break;
// 暂停
case R.id.stop:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
//setSuspendFlag(); } play.setVisibility(View.VISIBLE);
stop.setVisibility(View.GONE);
break;
// 上一首
case R.id.last: lastMusic();
break;
// 下一首
case R.id.next:
nextMusic();
break; default:
break;
} } public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

} };
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState){
     this.musicpath = savedInstanceState.getString("musicpath");
     this.position = savedInstanceState.getInt("position");
     super.onRestoreInstanceState(savedInstanceState);
    }
    @Override
    protected void onSaveInstanceState(Bundle outState){
     outState.putString("musicpath", musicpath);
     outState.putInt("position", position);
     super.onSaveInstanceState(outState);
    }
//初始化歌曲
private void initmusiclist(){
// 查询媒体信息
cur = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
this.startManagingCursor(cur);
setupViews();


}

private void setupViews() {
mListView = (ListView) findViewById(R.id.content);
mListView.setAdapter(new ListViewAdapter());
mListView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long arg3) {
//super.onItemClick(arg0,arg1,pos,arg3);
getlistpos = pos;
play();
//Intent intent = new Intent();
//intent.setClass(MainActivity.this,Main1Activity.class);
//startActivity(intent);
Session session = Session.getSession();
session.put("mediaPlayer",mediaPlayer);
///点击也不可以播放
/*if(cur == null || cur.getCount()==0){
return;
}
cur.moveToPosition(getlistpos);
String url = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
try {
mediaPlayer.setDataSource(url);
mediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
play.setVisibility(View.GONE);
stop.setVisibility(View.VISIBLE);


}
});
}

private void play(){
cur.moveToPosition(getlistpos);
musicpath = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
    showmusic.setText(cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
 mediaPlayer.reset();
        try{
         mediaPlayer.setDataSource(musicpath);
         mediaPlayer.prepare();
         mediaPlayer.start();
         mediaPlayer.setOnCompletionListener(new OnCompletionListener(){ @Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
nextMusic();
}
        
         });
        }catch(Exception e){
         e.printStackTrace();
      }
}
void nextMusic(){
getlistpos++;
if(getlistpos > (cur.getCount()-1)){
getlistpos = 0;
}
play();
}
// 上一首
void lastMusic() {
System.out.println("调用lastMusic()");
getlistpos--;
if (getlistpos <= 0) {
getlistpos = cur.getCount()- 1; }
System.out.println("last-->" + getlistpos); play(); } ///此为ListActivity的点击item方法
/*protected void onListItemClick(ListView l,View v,int position,long id){
super.onListItemClick(l, v, position, id);
if(cur == null || cur.getCount()==0){
return;
}
cur.moveToPosition(position);
String url = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
try {
mediaPlayer.setDataSource(url);
mediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}*/
//点击播放,怎么获取歌曲?并且将之传递?
/*private OnClickListener listener = new OnClickListener(){
public void onClick(View v){
Session session =Session.getSession();
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.start();
//Intent intent = new Intent();

} @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
};*/
class ListViewAdapter extends BaseAdapter {
// 这里返回10行,ListView有多少行取决于getCount()方法
public int getCount() {
return cur.getCount();
} public Object getItem(int arg0) {
return null;
} public long getItemId(int arg0) {
return 0;
} public View getView(int position, View v, ViewGroup parent) { final LayoutInflater inflater = LayoutInflater
.from(getApplicationContext()); if (v == null) {
v = inflater.inflate(R.layout.listview_layout, null);
}
TextView mBookName = (TextView) v.findViewById(R.id.bookname);
TextView mBookAuthor = (TextView) v.findViewById(R.id.author);
TextView times = (TextView)v.findViewById(R.id.times);
cur.moveToPosition(position);
String title =cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
mBookName.setText(title);
String name = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
mBookAuthor.setText(name);
int duration = cur.getInt(cur.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
int time = duration/1000;
String gettime = time / 60 + ":" + time % 60;


//times.setText(""+gettime);
return v;
}
}}