我有一個帶有兩個按鈕的主活動類。按下的按鈕將int []和int發送到片段活動,該活動由該活動中的特定片段訪問。在嘗試將活動的意圖發送到片段活動時,我會收到空指針異常,並從片段中的片段活動中檢索一個包。我知道這個解釋聽起來有點混亂,這裏是我的代碼:Android,將活動傳遞給片段活動,片段
從我的主要活動:
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);
}
});
從FragmentMenu:
@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從片段類返回0,所以我知道這個包是空的。我對碎片非常不熟悉,所以任何見解都會非常有幫助,謝謝!
編輯:
我已經改變了代碼爲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
對此錯誤的觀點?
我說實話也不太清楚。我在研究我的問題時看到了另一個代碼exerpt中的savedInstanceState!= null行。就像我說的,我對碎片的工作方式非常不熟悉。碎片在派生自mSectionsPagerAdapter的SectionsPagerAdapter中返回。所有發生在那裏的是一個帶有switch語句的getItem()方法,它簡單地返回一個新的片段,因此返回新的TripReportsFragment(); –
您應該在SectionsPagerAdapter中創建的片段實例上調用setArguments,否則getArguments將返回空指針。另外我不認爲你需要這裏的代碼if(savedInstanceState!= null){....},片段應該處理自身的配置更改。 – marcinj
我在這裏假設TripReportsFragment在你的viewpager中,但這可能不是真的。 – marcinj