Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
Java Android,将活动中的额外内容传递到片段活动,再传递到片段_Java_Android_Android Activity_Fragment_Bundle - Fatal编程技术网

Java Android,将活动中的额外内容传递到片段活动,再传递到片段

Java Android,将活动中的额外内容传递到片段活动,再传递到片段,java,android,android-activity,fragment,bundle,Java,Android,Android Activity,Fragment,Bundle,我有一个有两个按钮的主要活动类。按下的按钮将向片段活动发送int[]和int,该活动中的特定片段可以访问该片段活动。当我试图将意图从活动发送到片段活动,并从片段中从片段活动检索捆绑包时,会出现nullpointer异常。我知道这个解释听起来很混乱,以下是我的代码: 从我的主要活动: vessel.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) {

我有一个有两个按钮的主要活动类。按下的按钮将向片段活动发送int[]和int,该活动中的特定片段可以访问该片段活动。当我试图将意图从活动发送到片段活动,并从片段中从片段活动检索捆绑包时,会出现nullpointer异常。我知道这个解释听起来很混乱,以下是我的代码:

从我的主要活动:

vessel.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                //System.out.println(vessel.getText().toString()+" pushed");
                int id = j;
                datasource.openRead();
                trips = datasource.tripsWithVesselId(id);
                datasource.close();
                Intent frags = new Intent(MainActivity.this, FragmentMenu.class);
                frags.putExtra("trips", trips);
                frags.putExtra("id", id);
                startActivity(frags);
            }
        });
从碎片菜单:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.frag_menu);


    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    if(savedInstanceState != null)
    {
        TripReportsFragment frag = new TripReportsFragment();
        frag.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
    }
}
从我的片段类:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    Bundle bundle = getArguments();
    if (bundle != null) {
        trips = getArguments().getIntArray("trips");
        vessel = getArguments().getInt("id");           
    }
    System.out.println(vessel+" vessel id from mainactivity");
    View rootView = inflater.inflate(R.layout.fragment_trip,
            container, false);
    Button newTrip = (Button) rootView.findViewById(R.id.newTrip);
    Button pastTrips = (Button) rootView.findViewById(R.id.pastTrip);
    newTrip.setOnClickListener(this);
    pastTrips.setOnClickListener(this);
    return rootView;
}
我的血管ID从fragment类返回0,因此我知道bundle为null。我对片段非常不熟悉,因此任何见解都将非常有用,谢谢

编辑:

我已经在SectionPagerAdapter中更改了要更改的代码,现在看起来是这样的:

public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.
        switch (position) {
        case 0:
            TripReportsFragment frag = new TripReportsFragment();
            frag.setArguments(getIntent().getExtras());
            getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
            return frag;
        case 1:
            return new InactivityReportFragment();
        case 2:
            return new SpeciesFragment();       
        }
        return null;
    }
现在我得到一个新的错误:

01-10 14:26:04.915:E/AndroidRuntime(2538):java.lang.IllegalStateException:无法更改片段TripReportsFragment的容器ID{b1da3798 ID=0x1020002 android:switcher:2131230762:0}:以前是16908290现在是2131230762


关于此错误的看法?

根据您的演示,您仅在此处设置参数:

 if(savedInstanceState != null)
    {
        TripReportsFragment frag = new TripReportsFragment();
        frag.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
    }
savedInstanceState仅在配置更改时为非null,因此最初您的片段将没有参数集。您的片段是从布局文件初始化的吗?-它是在mSectionsPagerAdapter中创建的吗?如果是这样,可能您没有在那里调用setArguments?

您需要删除:

getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
发件人:

成为:

case 0:
       TripReportsFragment frag = new TripReportsFragment();
       frag.setArguments(getIntent().getExtras());
       return frag;

老实说,我不太确定。我看到了savedInstanceState!=我在研究问题时看到的另一个代码中的空行。正如我所说,我对片段的工作方式非常不熟悉。片段在mSectionsPagerAdapter派生的SectionsPagerAdapter中返回。所有发生的事情都有一个getItem()方法和一个switch语句,该语句只返回一个新片段,因此返回新的TripReportsFragment();您还应该在SectionsPagerAdapter中创建的片段实例上调用setArguments,否则getArguments将返回null指针。另外,如果(savedInstanceState!=null){……},片段本身应该处理配置更改,我认为您不需要在其中使用此代码。我假设TripReportsFragment在您的viewpager中,但这可能不是真的。我编辑了主要帖子以反映我当前的更改。我把片段setArguments放在实例化的地方,现在我得到了一个我在上面的帖子中描述的新错误,我不确定它的意思。删除:getSupportFragmentManager().beginTransaction().add(android.R.id.content,frag).commit();来自适配器的线路
case 0:
       TripReportsFragment frag = new TripReportsFragment();
       frag.setArguments(getIntent().getExtras());
       return frag;