ID에 대한 Android 조각을 볼 수 없습니까?

뷰에 추가하려는 조각이 있습니다.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

이 코드가 실행될 때 디버그에서 다음 오류가 발생합니다.

java.lang.IllegalArgumentException: No view found for id 0x7f080011
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityxml에서 Fragment layout으로 설정된 Fragment입니다.
FragmentActivity를 사용하여를 보유하는 Fragment Layout을 호스팅하고 feed_parser_layout있습니다.
위에서 올바르게 코딩하고 있습니까?



답변

FragmentActivity setContentView()onCreate()메소드 에서 잘못된 레이아웃을 지정했음을 깨달을 때 까지이 문제가 발생했습니다 .

FragmentTransaction.add()귀하의 경우에 전달 된 id는에 R.id.feedContentContainer지정된 레이아웃의 자식이어야합니다 setContentView().

당신은 우리에게 당신의 onCreate()방법을 보여주지 않았 으므로 아마도 이것은 같은 문제 일 것입니다.


답변

이 오류는 중첩 된 Fragments가 있고 getChildFragmentManager () 대신 getSupportFragmentManager ()를 사용하여 추가 할 때도 발생합니다 .


답변

해결책은 getChildFragmentManager()

대신에 getFragmentManager()

프래그먼트에서 호출 할 때. 활동에서 메소드를 호출하는 경우을 사용하십시오 getFragmentManager().

문제가 해결됩니다.


답변

나는 (코드에서 내 UI를 구축 할 때)이 문제를했고 그것은 내 발생 된 ViewPager(보여 주었다 Fragment단순히 사용하므로, 아이디 세트를 가지고 있지 S) pager.setID(id)후 일했다.

이 페이지 는 그것을 알아내는 데 도움이되었습니다.


답변

내가 만난 또 다른 시나리오. 중첩 된 조각을 사용하는 경우 조각과 페이지가있는 조각의 ViewPager라고 말하십시오.

내부 조각 (ViewPager 페이지)에서 조각 트랜잭션을 수행 할 때 필요합니다.

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

여기서 getActivity ()가 핵심입니다. …


답변

내 경우에는 호출기를 포함하는 DialogFragment를 표시하려고했지만 FragmentPagerAdapter가 Fragments를 호출기에 추가하려고 할 때이 예외가 발생했습니다. howettl 답변에 따라 호출기 부모가 FragmentActivity의 setContentView ()에 설정된보기가 아닌 것 같습니다.

문제를 해결하기 위해 내가 한 유일한 변경 사항은 getChildFragmentManager ()를 호출하여 얻은 FragmentMager에 FragmentPagerAdapter를 만드는 것입니다.

    public class PagerDialog extends DialogFragment{

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

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

답변

전달중인 레이아웃 ID FragmentTransaction.replace(int ID, fragment)가 팽창중인 다른 레이아웃 에 존재 하는 경우에도이 예외가 발생할 수 있습니다 . 레이아웃 ID가 고유하고 작동하는지 확인하십시오.