programing

ID에 대한 보기를 찾을 수 없는 Android 조각?

instargram 2023. 7. 26. 21:34
반응형

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_activity는 fragment layout xml.fragment()로 설정된 fragment입니다.
하여 프래그먼트 하고 있습니다.feed_parser_layout.
위에서 제가 이것을 올바르게 코딩하고 있습니까?

이 , 제가 저도이 겪있다니습었고에서 레이아웃을 까지는요. 제가 잘못된 레이아웃을 지정했다는 것을 깨닫기 전까지는요.setContentView()의 시대의onCreate()프래그먼트 활동의 메서드입니다.

에전었습니로 .FragmentTransaction.add()당신의 경우에는R.id.feedContentContainer 레자이합니야다에 지정된 .setContentView().

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

오류는 중첩된 조각이 있고 getChildFragmentManager()가 아닌 getSupportFragmentManager()로 조각을 추가할 때도 발생합니다.

은 솔션은다같습다니과를 사용하는 이었습니다.getChildFragmentManager()

getFragmentManager()

호출할 때 사용합니다.활동에서 메소드를 호출하는 경우 다음을 사용합니다.getFragmentManager().

그것으로 문제가 해결될 것입니다.

내가 만난 또 다른 시나리오.중첩된 조각을 사용하는 경우, 페이지가 있는 조각의 ViewPager를 말합니다.

내부 fragment(ViewPager의 페이지)에서 fragment 트랜잭션을 수행할 때 다음과 같은 작업이 필요합니다.

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

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

때) 했는데, 이 는 제 (사용자 인터페이스) 사용자 정의, 사용자 정의로 했습니다.ViewPager(표시된 바와 같이)Fragment신분증이 없어서 그냥 사용했습니다.pager.setID(id)그리고 효과가 있었습니다.

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

제 경우 호출기가 포함된 DialogFragment를 표시하려고 했는데 FragmentPagerAdapter가 호출기에 Fragment를 추가하려고 할 때 이 예외가 발생했습니다.howettl 답변으로 볼 때 Pager 부모가 fragmentActivity의 setContentView()에 설정된 보기가 아니었기 때문인 것 같습니다.

이 문제를 해결하기 위해 제가 한 유일한 변경 사항은 평소처럼 getFragmentManager()를 호출하여 얻은 것이 아니라 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가 고유하고 작동하는지 확인합니다.

중첩된 조각 포함

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

자바.java.java잘못된 인수예외:ID에 대한 보기를 찾을 수 없습니다.

제가 이 문제를 겪었을 때 저에게 효과가 있었던 것과 유사한 다른 스레드에서 읽은 답변은 레이아웃 xml과 관련이 있습니다.

로그캣에 "ID 0x7f080011에 대한 보기를 찾을 수 없습니다."라고 표시됩니다.

.gen->package->R.java->id에 아이디 그고를 아이디 찾니다습을 .0x7f080011.

이 때, 이 는 제가이문겪때을었이, 는디아이제에 속해 .FrameLayout내 안에서activity_main.xmljava.

(" " " " ID" ("라는 문장이 없습니다.)android:id = "blablabla").

모든 레이아웃의 모든 구성요소, 특히 로그캣에 언급된 구성요소에 ID가 있는지 확인합니다.

에서 업그레이드할 때 이 오류가 발생했습니다.com.android.support:support-v4:21.0.0com.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> 

따라서 레이아웃에는 하위 보기가 있어야 합니다.새 도서관에서 이걸 시행한 것 같아요.

이미 한 시나리오에 대한 답변이 나왔다는 것은 알지만, 제 문제는 조금 달랐고 제 입장이 되어줄 다른 사람이 있을 경우를 대비해 공유해야겠다고 생각했습니다.

저는 그 안에서 거래를 하고 있었습니다.onCreate()그러나 이 시점에서 뷰 트리가 부풀려지지 않았기 때문에 동일한 오류가 발생합니다.를 랜잭션입력에 것.onResume()모든 것이 잘 작동하도록 만들었습니다.

따라서 보기 트리를 부풀린 후 트랜잭션 코드가 실행되는지 확인하십시오!

Recycler View에서 Viewpager를 사용할 때 심각한 오류가 발생했습니다.아래 오류는 특별한 상황에서 발생했습니다.(FragmentStatePagerAdapter를 사용하여) ViewPager가 있는 RecyclerView가 있는 조각을 시작했습니다.Recycler View에서 Cell을 클릭하여 다른 fragment로 전환한 후 Phone의 하드웨어 Back 버튼을 사용하여 다시 탐색하고 App이 충돌할 때까지 잘 작동했습니다.

재미있는 것은 두 개의 View 페이지가 같은 Recycler View에 있었는데 두 개 모두 약 5개의 셀(다른 페이지는 화면에 보이지 않고 다운되어 있음)이 있었습니다.그래서 처음에는 솔루션을 첫 번째 Viewpager에 적용하고 다른 Viewpager는 그대로 둡니다(Fragments를 사용한 Viewpager).

처음 보기 호출기를 볼 수 있을 때는 뒤로 탐색하는 것이 잘 작동했습니다.이제 두 번째 것으로 스크롤한 다음 조각을 바꾸고 돌아왔을 때, 그것은 충돌했습니다(첫 번째 것과 같은 일이 발생했습니다).그래서 저는 두 개의 보기 페이지를 모두 변경해야 했습니다.

어쨌든 아래를 읽고 해결책을 찾으십시오.아래 충돌 오류:

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

디버깅하는 데 시간이 걸렸습니다.ChildFragmentManager에 합격했는지 확인하는 것을 포함하여 모든 솔루션을 적용하는 이 전체 스레드 게시물을 아래까지 읽으십시오.

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

마지막으로 FragmentStatePagerAdapter를 사용하는 대신 PagerAdapter를 확장하여 Usingfragment 없이 ViewPager에서 사용했습니다.나는 조각이 중첩된 BUG가 있는 곳이 있다고 생각합니다.어쨌든, 우리는 선택권이 있습니다.읽기...

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

조각이 없는 보기 페이지

링크가 중단될 수 있으므로 구현된 솔루션을 아래에 게시합니다.

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;
}

}

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

누군가가 저와 같은 어리석은 실수를 저질렀을 경우를 대비하여, 어딘가에 활동 내용을 덮어쓰지 않았는지 확인합니다(예: ContentView를 설정하기 위한 추가 통화 검색).

저의 경우 복사 및 붙여넣기 부주의로 인해 DataBindingUtil을 사용했습니다.활동 상태를 엉망으로 만든 DataBindingUtil.plate 대신 내 fragment에 ContentView를 설정합니다.

저도 같은 문제가 있었는데 방향 변경 문제가 발생했습니다.다른 어떤 해결책도 효과가 없었습니다.그래서 제가 제거하는 것을 잊어버린 것으로 밝혀졌습니다.setRetainInstance(true);화면 크기를 기준으로 두 개 또는 하나의 창 레이아웃을 수행할 때 내 조각에서.

에 있었습니다.FragamentTransaction.

저는 이걸 하고 있었습니다.t.replace(R.layout.mylayout);t.replace(R.id.mylayout);

입니다.layout(id)

다른 조각의 조각에서 호출할 때 이 문제가 발생합니다.

사용:

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

저도 같은 문제가 있었습니다. 여러분들이 볼 수 있도록 제 코드를 올리도록 하겠습니다. 제가 했던 것과 같은 일을 하지 마세요.

@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이런.

이 페이지는 Fragment 불법 인수에 대한 제안을 게시하기에 좋은 중앙 위치인 것 같습니다.예외.여기 당신이 시도할 수 있는 것이 하나 더 있습니다.이것이 마침내 저에게 효과가 있었던 것입니다.

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


별도로, 만약 당신이 이미 이 페이지에 제안된 다른 모든 것들을 시도하고 (그리고 전체 인터넷도) 몇 시간 동안 머리를 뽑고 있다면, 이 성가신 조각들을 버리고 좋은 오래된 표준 레이아웃으로 돌아가는 것을 고려해 보세요.(실제로 제가 문제를 발견했을 때 저는 그렇게 하고 있었습니다.)컨테이너 개념을 계속 사용할 수 있습니다.그러나 fragment로 채우는 대신 xml을 사용할 수 있습니다.include태그를 지정하여 조각에 사용한 것과 동일한 레이아웃으로 채웁니다.기본 레이아웃에서 다음과 같은 작업을 수행할 수 있습니다.

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

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

</FrameLayout>

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

내가 이 버그를 고쳤어요, 나는 사용합니다.commitNow()체교다를 commit().

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

commitNow인 동화방니다입입니다.commit()메소드는 비동기 메소드입니다.

Binding을 , "View Binding"과 " Binding"을 추가하는 데 주의를 않았습니다.setContentView()부풀린 후에ActivityHelloWorldBinding 명령어:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityHelloWorldBinding.inflate(layoutInflater)

    // Add this line.
    setContentView(binding.root)
}

저의 경우 재활용품 뷰 항목에 SupportMapFragment가 있었습니다(지도가 거의 정적 이미지처럼 상호 작용하지 않는 것처럼 보이게 하는 낮은 오버헤드 "liteMode"를 사용했습니다).정확한 프래그먼트 매니저를 사용하고 있었는데, 모든 것이 정상적으로 작동하는 것 같았습니다.적은 표로항목 목록이 화면 높이를 조금 초과하자 스크롤할 때 이 문제가 발생하기 시작했습니다.

XML에서 정적으로 선언하려고 할 때 발생한 문제를 해결하기 위해 다른 조각 안에 있는 동적 SupportMapFragment를 뷰에 삽입했기 때문입니다. 따라서 창에 뷰를 연결해야 조각 자리 표시자 레이아웃을 실제 조각으로 바꿀 수 있었습니다.화면에 표시됩니다.그래서 SupportMapFragment를 초기화하고, Fragment를 교체하고, onAttachedToWindow 이벤트에서 getMapAsync()를 호출하기 위한 코드를 넣었습니다.

제가 깜빡한 것은 제 코드가 두 번 실행되지 않도록 하는 것이었습니다.즉, onAttachedToWindow 이벤트에서 동적 SupportMapFragment가 여전히 null인지 확인한 후 새 인스턴스를 만들고 Fragment를 교체합니다.항목이 Recycler View의 맨 위에 있으면 창에서 분리된 다음 다시 스크롤할 때 다시 연결되므로 이 이벤트가 여러 번 실행됩니다.

Null 확인을 추가하면 RecyclerView 항목당 한 번만 발생하여 문제가 사라졌습니다!TL;DR!

는 이문는또당넣않지때다을니발생합신이한제▁you다▁put▁don▁alsot▁this를 넣지 않을 때도 발생합니다.<include layout="@layout/your_fragment_layout"/>의 신의에app_bar_main.xml

활동 대신 childFragmentManager를 사용합니다!!supportFragment Manager

뷰를 fragment로 바꾸려고 할 때 이 문제가 발생했습니다.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}

그런 다음 교체 작업을 에 넣는 것으로 이 문제를 해결했습니다.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. lift lift cycle에서 이을 fragment lift cycle과 lift에서 수행할 수 있습니다.onActivityCreated()

이것이 도움이 되길 바랍니다!

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

저는 이 문제를 겪고 있었습니다.저의 경우 프레임 레이아웃을 추가한 후 Xml 파일에 프레임 레이아웃을 추가하는 것을 잊어버렸고, 문제가 해결되었습니다.

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

를 fragment " fragment "로 .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);

저는 활동을 만드는 동안 단편적인 거래를 할 때도 같은 문제를 겪었습니다.

핵심 문제는 닉이 이미 지적한 것입니다. 뷰 트리는 아직 부풀려지지 않았습니다.그러나 그의 솔루션은 작동하지 않았습니다. - Resume, PostCreate 등에서 동일한 예외가 발생했습니다.

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

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();
    }

    //...
}

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

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

언급URL : https://stackoverflow.com/questions/7508044/android-fragment-no-view-found-for-id

반응형