Java 将Arraylist从片段传递到它自己的活动

Java 将Arraylist从片段传递到它自己的活动,java,android,listview,android-fragments,arraylist,Java,Android,Listview,Android Fragments,Arraylist,我有一个片段构建了一个songs ArrayList,我想将该ArrayList传递给FramAgent的活动。我知道我可以使用这个界面,但不确定我如何使用它 public class SongsListFragment extends Fragment { public interface passArrayList { public void onArticleSelected(Uri articleUri); // from

我有一个片段构建了一个songs ArrayList,我想将该ArrayList传递给FramAgent的活动。我知道我可以使用这个界面,但不确定我如何使用它

public class SongsListFragment extends Fragment
{

    public interface passArrayList {
            public void onArticleSelected(Uri articleUri);    
            // from android guide i don't know what to do
    }


}
这是我到目前为止所拥有的,请让我知道我为什么会得到这些

论主体活动

    @Override
    public void onFragmentSetSongs(ArrayList<Song> songs){
        songsArrayList = songs;
    }

    @Override
    public void onSongListItemClick(int position) {
        musicService.setSong(position);
        Song playSong = songsArrayList.get(position);
        txtCurrentSongTitle.setText(playSong.getTitle());
        txtCurrentSongTitle.requestFocus();
        musicService.playSong(); 

        btnPlayPause.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_pause));

        if (playbackPaused) {
            playbackPaused = false;
        }

        //setDownloaded();

    }
单击ListView时出错

at com..activities.MainActivity.onSongListItemClick(MainActivity.java:107)
            at com..fragments.SongsListFragment$1.onItemClick(SongsListFragment.java:194)
            at android.widget.AdapterView.performItemClick(AdapterView.java:308)
            at android.widget.AbsListView.performItemClick(AbsListView.java:1478)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:3480)
错误位置

 musicService.setSong(position);       //Main Activity (MainActivity.java:107)

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            songsItemClick.onSongListItemClick(position);  < --  here
 }
musicService.setSong(位置)//主要活动(MainActivity.java:107)
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
songsItemClick.onSongListItemClick(位置);<--此处
}

更改界面名称,使其以大写字母开头。然后在活动中,将这一行添加到活动声明中:
公共类FragmentActivity extends activity implements PassArrayList
,override接口方法。并在片段中添加以下内容:

PassArrayList mCallback;


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mCallback = (PassArrayList) getActivity();
}

@Override
public void onDetach() {
    super.onDetach();
    mCallback = null;
}

在代码中的某个地方,当您想将歌曲列表传递回活动时,在
mCallback
对象上调用方法
onArticleSelected()
,并将您的arraylist传递给此方法。然后此arraylist将作为activity中的方法
onArticleSelected()
的参数出现,您可以使用它制作任何您喜欢的东西。但是不要忘记在
ondeach()
hook方法中取消指向mCallback的链接,以防止上下文泄漏

回调似乎一切正常。你检查过你的服务是否为空吗?哦,这就是原因,我实际上没有连接到服务。当我连接到onCreate上的服务时,它现在已修复。我有一个后续问题,因为您擅长这方面的工作,现在可以在我的应用程序启动并正确地将其加载到数组列表中时执行。。现在当我点击导航按钮用另一个片段替换当前片段时。。。该片段与第一个片段完全相同,但具有不同的数组列表。。。如何将数组列表更新为activityI make seconds fragment与first完全相同。。但是我得到了我在上面定义的类强制转换异常,如果我没有正确理解您,那么在您的第二个片段中,您必须声明第二个回调,并在您的第二个片段中使用它,而不是在第一个片段的接口中使用它。您还必须向活动添加另一个implements声明,并且在第二个片段中,您必须将getActivity强制转换为第二个接口
 musicService.setSong(position);       //Main Activity (MainActivity.java:107)

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            songsItemClick.onSongListItemClick(position);  < --  here
 }
PassArrayList mCallback;


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mCallback = (PassArrayList) getActivity();
}

@Override
public void onDetach() {
    super.onDetach();
    mCallback = null;
}