2014-02-27 2 views
0

개발자 콘솔에서 일부 오류가 발생합니다. 이 오류에 대한 한 가지 사실은 모두 android 4.1 버전을 사용하는 기기의 것입니다.Android onCreateView가 호출되지 않습니다.

편집 : 4.2 장치에서 일부 오류가 있지만 여전히 정확한 동작을 재현 할 수 없습니다.

나는 안드로이드 버전 4.1으로 에뮬레이터 장치를 설정했고 debbuging을 통해 나는 onCreateView이 호출되지 않는 것을 발견했다.

조각을 사용 중입니다.

@Override 
public void onItemSelected(Bundle itemSelectedData) { 

    View rightLayout = findViewById(R.id.fragment_two); 

    if (rightLayout != null) { 
     // do something if we are in "tablet" mode 
    } else { 
     Infodata newFragment = new Infodata(); 
     newFragment.setArguments(itemSelectedData); 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.fragmentsboth, newFragment); 
     // Commit the transaction 
     transaction.commit(); 
    } 
} 

내 클래스 Infodata

public class Infodata extends Fragment implements OnSeekBarChangeListener, OnItemSelectedListener 

이를 우리가 수업이 수행하는 두 개의 창 또는 단일 창 레이아웃에있는 경우는 확인 후 나는 조각 (public class Fragments extends ActionBarActivity implements QueryFragment.OnQuerySelectedListener) 등을 처리하는 클래스가 이 방법으로서 분류 :

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

//... more stuff 
    activityContext = getActivity().getApplicationContext(); 
    bDFav = new Database(activityContext, true); 
//... more stuff 
} 

0

마지막 :

내 휴대 전화와
boolean isItemFavorite() { 
    bDFav.open(); 
    // do stuff 
    bDFav.close(); 

    return isFavorite; 
} 

(안드로이드 버전 4.2.1) 내 Fragments 클래스는 Infodata newFragment = new Infodata();을 수행하고 transaction.commit();onCreateViewonCreateOptionsMenuisItemFavorite() 호출에 필요한 모든 것을 인스턴스화라고합니다. 이로 인해 bDFav.open();isItemFavorite()이고 예상대로 작동합니다. 즉, nullpointerexception을 생성하지 않습니다.

다른 한편으로는 android 4.1.1을 실행하는 에뮬레이터 장치에서 transaction.commit();에서 동일하게 실행되지만 이후에는 내 메서드 onCreateView이 호출되지 않으므로 아무 것도 인스턴스화하지 않습니다. isItemFavorite()이 호출 될 때 onCreateOptionsMenu은 광고라고하며 nullpointerexceptionbDFav.open();에 생성합니다.

onCreateView이 (가) 왜 안드로이드 버전에서 호출되지 않으며 어떻게 우회 할 수 있습니까?

답변

0

음.

나는 대답을 찾았다 고 생각했습니다. 방법에있어서

:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
//... more stuff 
    activityContext = getActivity().getApplicationContext(); 
    bDFav = new Database(activityContext, true); 
//... more stuff 
} 

오른쪽은 onCreateView 나는 setHasOptionMenu(true) 그래서 방법은 setHasOptionsMenu(true);는 점에서 이후 프로그램의 제어라는 onCreateOptionsMenu에 전달되고 그래서

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
setHasOptionsMenu(true); 
//... more stuff 
    activityContext = getActivity().getApplicationContext(); 
    bDFav = new Database(activityContext, true); 
//... more stuff 
} 

이었다 한 후 메서드 onCreateView에 인스턴스화 된 내용을 사용해야하는 다른 메서드를 호출하면 응용 프로그램이 충돌합니다.

내 솔루션은 을 onCreateView 끝 부분에 붙이면 모든 인스턴스화가 올바르게 수행됩니다.

흥미로운 한 가지. 왜 일부 장치에서 작동하는지 다른 장치에서는 작동하지 않습니다.

관련 문제