Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取以前调用的活动/意图_Android_Android Intent_Android Activity - Fatal编程技术网

Android 获取以前调用的活动/意图

Android 获取以前调用的活动/意图,android,android-intent,android-activity,Android,Android Intent,Android Activity,我正在尝试在android中构建一个mp3播放器。我有一个带有3个按钮的主要活动,如下所示:正在播放、我的歌曲和设置。每个按钮都有一个onclick侦听器。除了一个例外,一切都很完美:当我点击MySongs ListActivity中的一首歌曲时,播放器被加载,歌曲开始播放。当我通过安卓设备上的“后退”按钮返回主菜单,然后再次单击MySongs,然后选择一首新歌时,一个新播放器被加载,旧播放器继续播放,因此现在播放的是两首歌曲,而不仅仅是新歌曲。我认为问题在于我使用意图的方式 mainActiv

我正在尝试在android中构建一个mp3播放器。我有一个带有3个按钮的主要活动,如下所示:正在播放、我的歌曲和设置。每个按钮都有一个onclick侦听器。除了一个例外,一切都很完美:当我点击MySongs ListActivity中的一首歌曲时,播放器被加载,歌曲开始播放。当我通过安卓设备上的“后退”按钮返回主菜单,然后再次单击MySongs,然后选择一首新歌时,一个新播放器被加载,旧播放器继续播放,因此现在播放的是两首歌曲,而不仅仅是新歌曲。我认为问题在于我使用意图的方式

mainActivity类(我省略了与此问题无关的代码)

现在是玩家类(同样,我省略了一些我认为不重要的东西)

public类播放器扩展活动实现OnCompletionListener、OnSeekBarChangeListener{
私人媒体播放器;
私有处理程序mHandler=新处理程序();
私人歌曲管理者sm;
私有int currentSongIndex=0;
私有布尔isplay=false;
私有布尔值isShuffle=false;
私有布尔值isRepeat=false;
private ArrayList songsList=new ArrayList();
@凌驾
创建时的公共void(Bundle sIS){
super.onCreate(sIS);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
这个.setContentView(R.layout.player);
mp=新媒体播放器();
sm=新歌曲管理器();
mp.setOnCompletionListener(此);
songsList=sm.getSongList();
startActivityForResult(新意图(getApplicationContext(),SongsList.class),100);
}
...
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
如果(结果代码==100){
currentSongIndex=data.getExtras().getInt(SongsManager.INDEX);
播放歌曲(当前歌曲索引);
}
};
...
最后,歌曲列表课

public class SongsList extends ListActivity {
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    private String[] songTitles;
    MainActivity main;

    public void onCreate(Bundle sIS){
        super.onCreate(sIS);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.songslist);
        SongsManager sm = new SongsManager();
        this.songsList = sm.getSongList();
        this.songTitles = new String[songsList.size()];
        for (int i = 0; i < songsList.size(); i += 1){
            try {
                songTitles[i] = (String)songsList.get(i).get(SongsManager.KEY_TITLE);
            } catch (Exception e){
                Log.d("SongsList", "Class Cast Exception");
            }
        }
        this.setListAdapter(new SongListAdapter());
        ListView lv = this.getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                int songIndex = position;
                Intent i = new Intent(getApplicationContext(), Player.class);
                i.putExtra(SongsManager.INDEX, songIndex);
                setResult(100, i);
                finish();
            }
        });
    }
...
公共类歌曲列表扩展了ListActivity{
public ArrayList songsList=new ArrayList();
私人字符串[]歌曲名称;
主要活动主要;
创建时的公共void(Bundle sIS){
super.onCreate(sIS);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.songslist);
SongsManager sm=新的SongsManager();
this.songsList=sm.getSongList();
this.songTitles=新字符串[songsList.size()];
对于(int i=0;i
如果您有任何见解,我将不胜感激。我正试图按照以下思路做一些事情:
Player.getIntent()或类似的东西,而不是调用新的Intent。

是的,问题是无法确保您现在看到的活动是同一个活动实例(在本例中是Player)这绝对不是您在MainActivity中创建的实例。您不应该创建Activity的实例

您必须弄清楚(欢迎使用Android)如何将您的整个状态保持在您用来启动新活动的意图中,或者保持在您调用的捆绑包中
sIS

看一看服务类。我想你会想让你的播放器成为一个服务,而不是一个活动。想想web服务器。一个活动是一个servlet,UI。中间件应该存在于一个服务中

public class Player extends Activity implements OnCompletionListener, OnSeekBarChangeListener{
    private MediaPlayer mp;
    private Handler mHandler = new Handler();
    private SongsManager sm;
    private int currentSongIndex = 0;
    private boolean isPlaying = false;
    private boolean isShuffle = false;
    private boolean isRepeat = false;
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    @Override
    public void onCreate(Bundle sIS){
        super.onCreate(sIS);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.setContentView(R.layout.player);
        mp = new MediaPlayer();
        sm = new SongsManager();
        mp.setOnCompletionListener(this);
        songsList = sm.getSongList();
        startActivityForResult(new Intent(getApplicationContext(), SongsList.class), 100);
    }

    ...
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 100){
            currentSongIndex = data.getExtras().getInt(SongsManager.INDEX);
            playSong(currentSongIndex);
        }
    };
    ...
public class SongsList extends ListActivity {
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    private String[] songTitles;
    MainActivity main;

    public void onCreate(Bundle sIS){
        super.onCreate(sIS);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.songslist);
        SongsManager sm = new SongsManager();
        this.songsList = sm.getSongList();
        this.songTitles = new String[songsList.size()];
        for (int i = 0; i < songsList.size(); i += 1){
            try {
                songTitles[i] = (String)songsList.get(i).get(SongsManager.KEY_TITLE);
            } catch (Exception e){
                Log.d("SongsList", "Class Cast Exception");
            }
        }
        this.setListAdapter(new SongListAdapter());
        ListView lv = this.getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                int songIndex = position;
                Intent i = new Intent(getApplicationContext(), Player.class);
                i.putExtra(SongsManager.INDEX, songIndex);
                setResult(100, i);
                finish();
            }
        });
    }
...