2014-01-10 4 views
0

두 개의 버튼이있는 메인 액티비티 클래스가 있습니다. 눌려진 버튼은 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 이외, 그래서 처음에 당신의 조각은 인수가 설정되지 것입니다 : 당신이 표시된 것을

답변

0

것은, 당신은 단지 여기에 인수를 설정하고부터. 조각이 레이아웃 파일에서 초기화 되었습니까? - mSectionsPagerAdapter에서 생성 되었습니까? 아마 어쩌면 당신은 거기에 setArguments를 호출하지 않을 것입니까?

getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit(); 

에서 : 되십시오

case 0: 
     TripReportsFragment frag = new TripReportsFragment(); 
     frag.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit(); 
     return frag; 

:

+0

솔직히 너무 확실하지 않다. 내가 savedInstanceState을 보았다! = 내 문제를 연구하는 동안 본 다른 코드 발급에서 널 줄. 내가 말했듯이, 나는 파편이 어떻게 작용하는지에 대해 끔찍하게 익숙하지 않다. 조각은 mSectionsPagerAdapter가 파생 된 SectionsPagerAdapter에 반환됩니다. 새로운 조각을 반환하는 switch 문을 사용하는 getItem() 메서드가 있습니다. 따라서 return new TripReportsFragment(); –

+0

SectionsPagerAdapter에서 생성 된 프래그먼트 인스턴스에서도 setArguments를 호출해야합니다. 그렇지 않으면 getArguments가 널 포인터를 반환합니다. 또한 나는 내부에서이 코드가 필요하다고 생각하지 않는다. (savedInstanceState! = null) {....}, 조각 자체가 구성 변경을 처리해야합니다. – marcinj

+0

TripReportsFragment가 뷰 페이지 안에 있다고 가정하지만 사실이 아닐 수도 있습니다. – marcinj

0

당신은 삭제해야

case 0: 
     TripReportsFragment frag = new TripReportsFragment(); 
     frag.setArguments(getIntent().getExtras()); 
     return frag; 
관련 문제