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.