두 개의 버튼이있는 메인 액티비티 클래스가 있습니다. 눌려진 버튼은 int [] 및 int를 해당 작업의 특정 단편에서 액세스하는 단편 활동에 보냅니다. 액티비티에서 파운데이션 활동으로 인 텐트를 보내고 프래그먼트에서 프래그먼트 액티비티에서 번들을 검색하려고 할 때 nullpointer 예외가 발생합니다. 내 주요 활동에서액티비티, 프래그먼트 활동, 엑스트라를 프래그먼트로 전달하는 안드로이드
: FragmentMenu에서
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가 조각 클래스에서 0을 반환하므로 번들이 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;
}
지금은 새로운 오류가 점점 오전 :
을 0110 14 : 26 : 04.915 : E/AndroidRuntime (2538) : java.lang.IllegalStateException : 조각 TripReportsFragment {b1da3798 id = 0x1020002 android : switcher : 2131230762 : 0}의 컨테이너 ID를 변경할 수 없습니다 : 16908290 지금 2131230762
이 오류가 발생하는 이유는 무엇입니까?
if(savedInstanceState != null)
{
TripReportsFragment frag = new TripReportsFragment();
frag.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
}
savedInstanceState는 구성 변경에 null 이외, 그래서 처음에 당신의 조각은 인수가 설정되지 것입니다 : 당신이 표시된 것을
솔직히 너무 확실하지 않다. 내가 savedInstanceState을 보았다! = 내 문제를 연구하는 동안 본 다른 코드 발급에서 널 줄. 내가 말했듯이, 나는 파편이 어떻게 작용하는지에 대해 끔찍하게 익숙하지 않다. 조각은 mSectionsPagerAdapter가 파생 된 SectionsPagerAdapter에 반환됩니다. 새로운 조각을 반환하는 switch 문을 사용하는 getItem() 메서드가 있습니다. 따라서 return new TripReportsFragment(); –
SectionsPagerAdapter에서 생성 된 프래그먼트 인스턴스에서도 setArguments를 호출해야합니다. 그렇지 않으면 getArguments가 널 포인터를 반환합니다. 또한 나는 내부에서이 코드가 필요하다고 생각하지 않는다. (savedInstanceState! = null) {....}, 조각 자체가 구성 변경을 처리해야합니다. – marcinj
TripReportsFragment가 뷰 페이지 안에 있다고 가정하지만 사실이 아닐 수도 있습니다. – marcinj