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


287

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

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있습니다.
위에서 올바르게 코딩하고 있습니까?


3
XML을 포함시킬 수 있습니까?
jsmith

1
Activity에서 setContentView를 호출하기 전에 조각 트랜잭션을 만들 때 동일한 오류가 발생할 수 있습니다.
Pavel

답변:


374

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

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

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


5
setContentView에 지정된 레이아웃의 자식이라는 것은 무엇을 의미합니까? 아이 만드는 법?
NinjaCoder

11
XML에서 상위 뷰 내에 선언 된 경우 뷰는 다른 뷰의 자식입니다. 즉. 의 TextView내부 RelativeLayout는의 자녀입니다 RelativeLayout.
howettl

@ howettl : 나는 그것이 오래된 게시물이라는 것을 알고 있습니다. 그러나 귀하의 답변 으로이 문제를 해결할 수 없습니다. 여기 SO 질문이 있습니다 : stackoverflow.com/questions/25844394/…- 도와주세요? 감사!
TheDevMan

@howettl, 비슷한 문제로 도와주세요. stackoverflow.com/questions/26966623/…
Vamsi Challa

3
나에게 발생했던 일. CTRL + C의 단점 CTRL + V.
0nyx

296

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


10
나의 다른 길은 내륙이었다. getChildFragmentManager ()를 호출하여 기본 단편 컨테이너에 추가하려고했습니다. 이것을 지적하면 나를 위해 해결되었습니다. 감사합니다 +1
speedynomads

@Malachiasz : ViewPager에 대한이 질문을 볼 수 있습니까? 감사합니다 stackoverflow.com/questions/27937250/…
Hoa Vu

이것은 정확히 내 문제였습니다. 감사합니다. 그러나 홀수는 .show ()를 호출 할 때 가로 방향으로 만 발생했습니다. 그것을 사용하여 주요 조각을 대체하면 잘 작동했습니다.
cohenadair

1
그건 내 문제 였어, 정말 고마워! 느린 장치에서만 발생했기 때문에 정확히 무슨 일이 일어나고 있는지 이해하기가 어려웠습니다.
YawaraNes

1
이 질문에 여러 번 나온 후에는 아무도 내 문제를 겪지 않은 것처럼 느꼈습니다. 그들이 오류 코드가 더 구체적이라고 할 수 있다면 좋을 것입니다.
KodyVanRy

67

해결책은 getChildFragmentManager()

대신에 getFragmentManager()

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

문제가 해결됩니다.


4
@ surfer190 getSupportFragmentManager()대신 사용하십시오.
Amir Hossein Ghasemi

getChildFragmentManager ()로 변경되었으며 작동합니다 !!
Shyam

필자의 경우 하단 시트 조각에서 viewpager를 사용하여 조각 탐색을 사용하고있었습니다. 당신의 솔루션은 훌륭하게 작동했습니다! Thanx of Thanx bro.
Debasish Ghosh

1
같은 문제가 있었고 이것이 나를 위해 해결했습니다! getActivity (). getFragmentManager () 대신 getChildFragmentManager () 대신 한번 생각 해봤습니다. :) TY!
시몬

활동에서 메소드를 호출하지만 getFragmentManager()더 이상 사용되지 않습니다!
Alireza Noorali

29

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

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


1
viewPager를 사용할 때도 같은 문제가 발생했습니다. 트랜잭션을 수행하기 전에 viewPager.setCurrentItem (n)을 사용하여 동일한 오류가 수정되었습니다. 아마도 누군가에게 유용 할 것입니다.
Kirk Hammett

제 경우에는 비슷한 방향이지만 .setID에 음수 값을 사용한다는 것이 문제였습니다. 양의 정수를 사용하면 문제가 해결되었습니다.
Ignacio Hagopian

29

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

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

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

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


예. 저에게는 다른 모든 구현은 이것과 별개로 훌륭했습니다. 다음과 같은 코드에 직접 액세스하려고했습니다. FragmentTransaction transaction = getSupportFragmentManager (). beginTransaction (); 그런 다음 언급 한대로 getActivity ()를 별도로 사용하여 fragmentmanager를 얻었습니다. 그것은 꽤 작동
anand krish

18

내 경우에는 호출기를 포함하는 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;
    }
}

getChildFragmentManager ()는 DialogFragment에서 접근 할 수 없습니다
Abdalrahman Shatou

14

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


컴파일러는 고유하지 않은 경우 현재 레이아웃 에서 ID가 누락되었는지보고하지 않으므로 실제 문제는 ID의 고유성이 아니라 현재 레이아웃에서 ID가 누락 된 것입니다.
사무엘

13

이 문제와 비슷한 다른 스레드에서 읽은 대답은이 문제가 레이아웃 XML과 관련되었을 때 저에게 효과적이었습니다.

로그 캣에 "ID 0x7f080011에 대한보기가 없습니다"라고 표시되어 있습니다.

를 열고 gen->package->R.java->idid를 찾으십시오 0x7f080011.

이 문제가 발생했을 때이 ID FrameLayout는 내 activity_main.xml파일 에 속해있었습니다 .

FrameLayout에 ID가 없습니다 (statement가 없었습니다 android:id = "blablabla").

모든 레이아웃의 모든 구성 요소, 특히 logcat에 인용 된 구성 요소에 ID가 있는지 확인하십시오.


1
좋은. LinuxOS가있는 Android Studio의 경우 / home / bob / AndroidStudioWorkspace / HelloWorld / app / build / generated / source / r / release / android / support / v7 / appcompat입니다.
portsample

11

에서 com.android.support:support-v4:21.0.0로 업그레이드 할 때이 오류가 발생 했습니다 com.android.support:support-v4:22.1.1.

레이아웃을 다음과 같이 변경해야했습니다.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

이에:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

따라서 레이아웃에는 반드시 자식 뷰가 있어야합니다. 나는 그들이 새로운 도서관에서 이것을 시행했다고 가정합니다.


9

함께 중첩 단편

해결 된 충돌 getChildFragmentManager()대신 사용하여 나를 위해getActivity().getSupportFragmentManager()

java.lang.IllegalArgumentException : id에 대한보기가 없습니다.


그러나 내부 어댑터는 getchildFragmentManger를 방해 할 수 없습니다.
Sunil Chaudhary

8

나는 이것이 하나의 시나리오에 대해 이미 답변되었다는 것을 알고 있지만 내 문제는 약간 달랐으며 다른 누군가가 내 신발에있을 때 공유 할 것이라고 생각했습니다.

onCreate()에서 거래 를했지만이 시점에서 뷰 트리가 팽창되지 않았으므로 동일한 오류가 발생합니다. 트랜잭션 코드를 넣으면 onResume()모든 것이 잘 작동합니다.

뷰 트리가 팽창 된 후에 트랜잭션 코드가 실행되도록하십시오!


3
흠 ... 내 경우에는 그러한 코드가 onCreate 또는 onResume에 있는지 여부에 차이가 없었습니다.
IgorGanapolsky

내 경우에도 @ IgorGanapolsky는 fragment 's의 콜백으로 해결했습니다 onAttach. 내 답변
Alexander Malakhov

이것은 내 문제였습니다. 뷰 상태를 새로 고치기 위해 다른 클래스를 호출하여 아직 팽창되지 않은 레이아웃에서 조각 트랜잭션을 수행했습니다. onResume ()에서 호출하면 문제가 해결되었습니다.
AWT

8

Recycler View에서 Viewpager를 사용할 때 Nasty 오류가 발생했습니다. 오류가 발생하면 특별한 상황에 직면했습니다. Viewpager와 함께 RecyclerView가있는 조각을 시작했습니다 (FragmentStatePagerAdapter 사용). RecyclerView에서 셀을 클릭 할 때 다른 조각으로 전환 한 다음 전화의 하드웨어 뒤로 버튼을 사용하여 다시 탐색하고 앱이 다운 될 때까지 잘 작동했습니다.

그리고 이것에 대해 재미있는 점은 동일한 RecyclerView에 두 개의 Viewpager가 있고 둘 다 약 5 셀 떨어져 있다는 것입니다 (다른 화면에서는 보이지 않았고 다운되었습니다). 그래서 처음에는 방금 첫 번째 Viewpager에 솔루션을 적용하고 그대로 다른 조각을 남겼습니다 (Fragments를 사용하는 Viewpager).

첫 번째보기 호출기를 볼 수 있었을 때 탐색 기능이 정상적으로 작동했습니다. 이제 두 번째 스크롤로 스크롤 한 다음 조각을 변경하고 다시 돌아 왔을 때 충돌이 발생했습니다 (첫 번째 것과 동일한 일이 발생했습니다). 그래서 두 Viewpagers를 모두 변경해야했습니다.

어쨌든 작동 솔루션을 찾으려면 아래를 읽으십시오. 아래의 충돌 오류 :

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

디버깅하는 데 몇 시간이 걸렸습니다. childFragmentManager를 전달하는지 확인하는 것을 포함하여 모든 솔루션을 적용 할 때 까지이 전체 스레드 게시물을 읽으십시오.

아무것도 효과가 없었습니다.

마지막으로 FragmentStatePagerAdapter를 사용하는 대신 PagerAdapter를 확장하고 조각을 사용하지 않고 Viewpager에서 사용했습니다. 중첩 된 조각이있는 버그가있는 곳이 있다고 생각합니다. 어쨌든, 우리는 옵션이 있습니다. 읽다 ...

아래 링크는 매우 도움이되었습니다.

조각없는 Viewpager

링크가 종료되어 구현 된 솔루션을 아래에 게시하고 있습니다.

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

이것이 도움이 되었기를 바랍니다!


예,이 솔루션은 효과가 있었지만, 자체 수명주기 및 변수를 사용하여 어려운 구성이 필요하고 뷰뿐만 아니라 어떻게해야합니까? 재생 및 음소거 버튼이있는 videoView 및 imageView와 함께 사용됩니다. 내 사건에 도움이되지 않습니까?
Nikita Axyonov


7

나는 같은 문제가 있었지만 오리엔테이션 변경에 관한 문제가 발생했습니다. 다른 솔루션은 작동하지 않았습니다. 따라서 setRetainInstance(true);화면 크기에 따라 두 개 또는 하나의 창 레이아웃을 수행 할 때 조각에서 제거하는 것을 잊어 버렸습니다 .


중첩 된 조각에있는 경우 setRetainInstance (true)를 false로 설정하면 오류가 해결됩니다.
ralphgabb

5

내 실수는에 있었다 FragamentTransaction.

나는 t.replace(R.layout.mylayout);대신에 이것을하고 있었다.t.replace(R.id.mylayout);

차이점은 하나는 레이아웃이고 다른 하나는 layout(id)


4

누군가 내가했던 바보 같은 실수를 저지른 경우에 대비해서; 활동 내용을 덮어 쓰지 않는지 확인하십시오 (예 : setContentView에 대한 추가 호출을 찾으십시오)

필자의 경우 부주의 한 복사 및 붙여 넣기로 인해 DataBindingUtil.inflate 대신 조각의 DataBindingUtil.setContentView를 사용하여 활동 상태를 엉망으로 만들었습니다.


3

나는이 같은 문제가 있었으므로 코드를 게시하여 모두 볼 수 있고 내가했던 것과 똑같은 일을하지 않도록하십시오.

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

내가 전에 조각을 설정하고 있음에 유의하십시오 setContentView. 죄송합니다.


1
감사합니다! 내가 넣어 그래서 나는 같은 일을하고 있었다 setContentView안에 내onBuildHeaders
랜디

3

이 페이지는 Fragment IllegalArgumentException에 대한 제안을 게시하기에 좋은 중앙 위치 인 것 같습니다. 시도해 볼 수있는 것이 하나 더 있습니다. 이것이 마침내 나를 위해 일한 것입니다.

가로 방향에 대한 별도의 레이아웃 파일이 있다는 것을 잊었습니다. FrameLayout 컨테이너를 거기에 추가 한 후에도 조각이 작동했습니다.


별도의 참고 사항으로, 이미이 페이지 (및 전체 인터넷)에서 제안 된 모든 것을 시도하고 몇 시간 동안 머리카락을 뽑은 경우이 성가신 조각을 버리고 좋은 표준 레이아웃으로 돌아가는 것을 고려하십시오. (실제로 내 문제를 발견했을 때 수행하고 있던 작업이었습니다.) 컨테이너 개념을 계속 사용할 수 있습니다. 그러나 조각으로 채우는 대신 xml include태그를 사용하여 조각에서 사용한 것과 동일한 레이아웃으로 채울 수 있습니다. 기본 레이아웃에서 다음과 같이 할 수 있습니다.

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

where former_fragment_layout는 조각에 사용하려는 XML 레이아웃 파일의 이름입니다. 자세한 내용 은 include사용하여 레이아웃 재사용을 참조하십시오 .


이것은 좋은 제안이지만 조각을 동적으로 전환 해야하는 경우 작동하지 않습니다. 또한 조각에서 동작 (코드)을 캡슐화 할 수 있기 때문에 재사용 성이 떨어집니다.
Alexander Malakhov

나는 확실히 동의합니다. 조각이 훨씬 좋습니다.
Suragch

2

내 경우에는 리사이클 뷰 항목에 SupportMapFragment가 있습니다 (지도가 거의 정적 이미지처럼 비 대화 형으로 표시되도록 낮은 오버 헤드 "liteMode"를 사용하고있었습니다). 올바른 FragmentManager를 사용하고 있었고 작은 목록으로 모든 것이 잘 작동하는 것처럼 보입니다. 항목 목록이 화면 높이를 조금 초과하면 스크롤 할 때이 문제가 발생하기 시작했습니다.

XML에서 정적으로 선언하려고 할 때 발생하는 일부 문제를 해결하기 위해 다른 조각 내부에있는 뷰 안에 동적 SupportMapFragment를 삽입했기 때문입니다. 이 때문에 조각 플레이스 홀더 레이아웃은보기가 창에 연결되면 (즉, 화면에 표시) 실제 조각으로 만 대체 될 수 있습니다. 그래서 SupportMapFragment를 초기화하고 Fragment replace를 수행하고 onAttachedToWindow 이벤트에서 getMapAsync ()를 호출하는 코드를 작성했습니다.

내가 잊어 버린 것은 내 코드가 두 번 실행되지 않는 것입니다. 즉 onAttachedToWindow 이벤트에서 새 인스턴스를 생성하고 조각 교체를 시도하기 전에 동적 SupportMapFragment가 여전히 null인지 확인하십시오. 항목이 RecyclerView의 맨 위에서 떨어지면 창에서 분리 된 다음 다시 스크롤하면 다시 연결되므로이 이벤트는 여러 번 발생합니다.

null 확인을 추가하면 RecyclerView 항목 당 한 번만 발생하여 문제가 해결되었습니다! TL; DR!


2

이것은 다른 조각 내부의 조각에서 호출 할 때 발생합니다.

사용하다 :

getActivity().getSupportFragmentManager().beginTransaction();

1

에서 뷰를 조각으로 바꾸려고 할 때이 문제가 발생했습니다 onCreateView(). 이처럼 :

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

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

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

그것은 나에게 말했다

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

그런 다음 replace에 넣어서이 문제를 해결했습니다 onActivityCreated(). 이처럼 :

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

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

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. onCreateView()나중에 교체 할 수 있도록 뷰를 반환해야합니다.
  2. 프래그먼트 리프트 사이클의 다음 기능에서이 뷰에 대한 작업을 onActivityCreated()

도움이 되었기를 바랍니다!


1

이 버그를 수정하고 commitNow()replace를 사용합니다 commit().

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

(가) commitNow동기화 방법에있어서 상기 commit()방법은 비동기 방식이다.


1

필자의 경우이 예외는 동일한 레이아웃 요소 (조각 자리 표시 자)에 다른 ID를 사용하면서 다른 빌드 변형에 대해 여러 ID를 사용했을 때 발생했습니다. 어떤 이유로 든 처음 조각을 교체 할 때 완벽하게 작동하지만 다시 시도하면이 예외가 발생합니다. 다른 빌드 변형에 대해 여러 레이아웃이있는 경우 동일한 ID를 사용하고 있는지 확인하십시오.


0

프래그먼트 내의 프래그먼트를로 바꾸려고 fragmentManager하지만 문제가 발생할 수 있는 상위 프래그먼트팽창시키지 않는 경우.

에서 BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

super.onCreateView(inflater, container, savedInstanceState); 프래그먼트의 올바른 레이아웃을 팽창시키는 것으로 교체하십시오 .

        return inflater.inflate(R.layout.base_fragment, container, false);

0

액티비티 생성 중에 조각 트랜잭션을 수행 할 때도 같은 문제가 발생했습니다.

핵심 문제는 Nick이 이미 지적한 것입니다 . 뷰 트리가 아직 팽창되지 않았습니다. 그러나 그의 솔루션은 작동하지 않았습니다-onResume, onPostCreate 등의 예외는 없습니다.

해결책은 컨테이너 조각에 콜백을 추가하여 준비가되었을 때 신호를 보내는 것입니다.

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

그리고 활동에서 :

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}

0

제 경우에는 조각 클래스 파일을 사용하여 listview 어댑터 클래스를 선언했습니다. 공용 어댑터 클래스에 다른 파일을 사용했는데 오류가 사라졌습니다.



0

동일한 ID를 가진 두 개의 조각으로 두 개의보기가있는 경우에도 발생합니다.


이것은 올바르지 않습니다. 이 경우 코드는 컴파일되지 않습니다.
Taslim Oseni

0

컨테이너 레이아웃을 활동에 추가하기 전에 조각을 추가하려고했기 때문에 동일한 문제가 발생했습니다.


0

때로는 BottomNavigationView를 사용하고 있기 때문입니다. 탐색 및 해당 활동에서 인 텐트를 열면 조각을 열면

transaction.replace(R.id.container,new YourFragment());

활동에서 사용중인 탐색 방법을 찾을 수 없습니다.

솔루션 : 앱에서 addOnBackStack을 사용하여 활동을 조각화하고 탐색을 처리하십시오. Jetpack Navigation을 구현 한 경우 프로젝트에서 조각을 사용하십시오.


0

나의 경우에는. 나는 때 Activity와 함께 서버 Fragment를 다시 만들어야 Fragment할 때

  • 언어는 변화이다
  • 프래그먼트 레이아웃 일부는 필요하지 않거나 콘텐츠 변경을 다시 만들어야 함
  • 다른 변화들
  • 모든 Fragments를 지우고 null활동으로 모두 설정 했지만 Fragment는 이미 자체 생성되지만 호스트 활동은 bean set null이므로 Fragment view를 호출하기 전에 null을 확인하십시오.

    예를 들어

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
    Licensed under cc by-sa 3.0 with attribution required.