Android 如何在片段之间传递数据?

Android 如何在片段之间传递数据?,android,android-fragments,Android,Android Fragments,对于所有投反对票并投票赞成关闭此问题的人来说,他们认为这与textview的范围有关……然后看看,这与textview的范围无关 无法在片段之间传递数据,应用程序崩溃,我不知道我做错了什么…我遵循了这个链接 这是我正在使用的代码 片段A(此片段正在传递数据) 错误在这行代码中 TextView text=(TextView)view.findViewById(R.id.tt); //这行在receiver fragment(FragmentArtister)中您的FragmentSongs类需

对于所有投反对票并投票赞成关闭此问题的人来说,他们认为这与textview的范围有关……然后看看,这与textview的范围无关

无法在片段之间传递数据,应用程序崩溃,我不知道我做错了什么…我遵循了这个链接

这是我正在使用的代码 片段A(此片段正在传递数据)

错误在这行代码中

TextView text=(TextView)view.findViewById(R.id.tt);
//这行在receiver fragment(FragmentArtister)中

您的
FragmentSongs
类需要在FragmentCreatedListener上实现

public class FragmentSongs extends Fragment implements OnFragmentCreatedListener { 

  public void onFragmentCreated(ArrayList<SongDetails> msg) {
    // whatever
  }


}

这意味着您的
活动
需要在FragmentCreatedListener上实现

,正如我在评论中所说的,您正在尝试使用尚未正确初始化的
片段
。当
片段歌曲
附加到
活动
(将出现的
查看页面
请求的操作)时,调用其
onAttach()
方法。在这个方法中,您可以将
活动
投射到您的侦听器,但是您也可以立即调用侦听器的回调。这将使您的应用程序崩溃(您发布的例外情况除外),因为在该侦听器中,您正试图使用
ViewPager
FragmentArtists
的第二个
片段的视图。此
片段
尚未初始化,此时
查看页面
的第一个片段几乎没有连接到活动,您已经尝试使用第二个片段的视图,这显然会失败

public class FragmentSongs extends Fragment implements OnFragmentCreatedListener { 

  public void onFragmentCreated(ArrayList<SongDetails> msg) {
    // whatever
  }


}
您链接到的教程是可以的,简单化了,但是还可以(不去那个链接,我假设您的代码来自教程)。问题是,您在更复杂的情况下使用了非常简单的场景中的代码(事实上,如果您在该教程的代码中插入当前代码,您将得到相同的异常(过早调用侦听器))

当片段完全构建时(比如当用户使用应用程序并选择一首歌曲时,您希望向他显示应用程序的艺术家部分(此时调用侦听器并使其传递数据))应该使用回调侦听器接口,同时也要小心处理片段不可用的可能性


如果您需要在片段生命周期的早期在片段之间传递数据,以至于无法保证片段仍然可用(就像您在片段的
onAttach()
中调用侦听器一样),那么实现片段以在构建时直接从活动中获取数据,在其生命周期方法之一中。你通过的是什么还不清楚,所以我在这里没什么可说的。

如果我们知道坠机的原因,我们或许可以提供帮助。你能发布日志吗?发布日志。。。但我认为您应该使用另一种方法在片段之间传递数据(例如widh参数),请给我另一种传递数据的方法的链接data@AnkitSrivastava对不起,如果你用XML创建你的片段,是一个好方法。。。对于您的问题,您可以发布活动的xml布局吗?@Pauland我没有理解您的意思??您的意思是,如果我为片段设置单独的布局,您有吗?然后是的,我有,这反过来会给我另一个(NullPointException)错误…………在片段B中……在方法中(这意味着在接收到来自另一个片段的信息后设置一些内容),错误在这一行text.setText(“makzzz”);是的,所以我回答了你的问题。现在你的一个观点是空的(另一个单独的问题)。如果我解决了这个问题,我会给你奖金,(因为这可能会导致与这个问题相关的另一个问题)因为在我记忆中,我曾经尝试过实现它(你刚才说的)几天前,我被困在这里……如果我不能在7天内解决问题,我会给你奖金,但不会检查你的答案是否正确……你没有提供足够的代码让我为你做作业,很抱歉,我有个问题要问你……寻呼机;(此代码位于我已定义片段的holder活动中)这行代码不是确保了我的片段将在同一时间生成吗…??如果不能,我们可以使用查看页面来创建多个片段,所有的片段都在同一时间生成吗?一旦它们被创建,那么只显示它们?我遵循的教程也在开发人员中给出website@AnkitSrivastava
setOffScreenPageLimit()
将在构建片段实例后保留它们(您应小心使用此方法)。当调用
onAttach
方法并且您已经尝试访问另一个片段的视图(该片段也未初始化)时,片段视图尚未构建。开发人员站点上没有任何示例可以显示他们在哪里调用侦听器,直接从
onAttach()修改另一个片段的视图
另一个片段的方法。编辑您的问题,并解释您试图在片段之间传递的内容。好的,谢谢您向我解释屏幕外的设置。这是我头脑中的主要困惑部分,您刚刚回答了,但您所说的关于onAttach()的内容我这里有一个dboubt,看一看,…我知道您想说什么。。。。(在本教程中,他们没有编写关于如何初始化片段的代码,但他们确实以与我相同的方式使用了OnAttach()。也许这就是我感到困惑的原因)
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mymusic);


           fragments = new Vector<Fragment>();
            fragments.add(Fragment.instantiate(this, FragmentSongs.class.getName()));
            fragments.add(Fragment.instantiate(this, FragmentArtists.class.getName()));
            fragments.add(Fragment.instantiate(this, FragmentPlaylists.class.getName()));
            fragments.add(Fragment.instantiate(this, FragmentAlbums.class.getName())); 


            ViewPagerAdapter adapter = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments);


            ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);



            pager.setAdapter(adapter);
            pager.setOffscreenPageLimit(4);

            pager.setCurrentItem(0);

    }      public void onFragmentCreated(ArrayList<SongDetails> msg) {
            FragmentArtists Obj=(FragmentArtists)  fragments.get(1);
            Obj.setSongList(msg);
            }

    }
package sourcecode.jazzplayer;

import java.util.ArrayList;

public interface OnFragmentCreatedListener {
    public void onFragmentCreated(ArrayList<SongDetails> msg);

}
  09-19 23:50:46.851: E/AndroidRuntime(2125): java.lang.NullPointerException
09-19 23:50:46.851: E/AndroidRuntime(2125):     at sourcecode.jazzplayer.FragmentArtists.setSongList(FragmentArtists.java:55)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at sourcecode.jazzplayer.MyMusic.onFragmentCreated(MyMusic.java:45)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at sourcecode.jazzplayer.FragmentSongs.onAttach(FragmentSongs.java:128)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:823)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:819)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1066)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.View.measure(View.java:12603)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.View.measure(View.java:12603)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.View.measure(View.java:12603)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.View.measure(View.java:12603)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.os.Looper.loop(Looper.java:137)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at android.app.ActivityThread.main(ActivityThread.java:4340)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at java.lang.reflect.Method.invokeNative(Native Method)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at java.lang.reflect.Method.invoke(Method.java:511)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-19 23:50:46.851: E/AndroidRuntime(2125):     at dalvik.system.NativeStart.main(Native Method)
public class FragmentSongs extends Fragment implements OnFragmentCreatedListener { 

  public void onFragmentCreated(ArrayList<SongDetails> msg) {
    // whatever
  }


}
        listener =  (OnFragmentCreatedListener) activity;