java.lang.IllegalArgumentException:fragmentのID 0x1020002(Android:ID / Content)のビューが見つかりませんでした -- android フィールド と fragmenttransaction フィールド 関連 問題

java.lang.IllegalArgumentException: No view found for id 0x1020002 (android:id/content) for fragment












33
vote

問題

日本語

私はある断片から別の断片に移動しようとしています。フラグメントトランザクション中に次のエラーが表示されます -

<事前> <コード> java.lang.IllegalArgumentException: No view found for id 0x1020002 (android:id/content) for fragment PhotosFragment2{41a57218 #3 id=0x1020002} at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:930) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5086) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) at dalvik.system.NativeStart.main(Native Method) 下記は以下のクラスです。フラグメントトランザクションの次のコードを使用しています <事前> <コード> Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit();

photosfragment.java

<事前> <コード> public class PhotosFragment extends Fragment { private FragmentActivity myContext; @Override public void onAttach(Activity activity) { myContext = (FragmentActivity) activity; super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.photos, container, false); rootView.setVerticalScrollBarEnabled(false); int[] mThumbIds = { R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album8, R.drawable.album6, R.drawable.album7, R.drawable.album12, R.drawable.album10, }; int[] mThumbIds2 = { R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album6, R.drawable.album7, R.drawable.album9, R.drawable.album10, R.drawable.album11, R.drawable.album12, R.drawable.album8, R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album6, R.drawable.album7, R.drawable.album9, R.drawable.album10, R.drawable.album11, R.drawable.album12, R.drawable.album8, }; CustomGridSingle2 adapter = new CustomGridSingle2(myContext, mThumbIds); GridView grid = (GridView)rootView.findViewById(R.id.gridView); final ImageView img= (ImageView)rootView.findViewById(R.id.imageView7); grid.setFocusable(false); grid.setAdapter(adapter); grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }); CustomGridSingle2 adapter2 = new CustomGridSingle2(myContext, mThumbIds2); GridView grid2 = (GridView)rootView.findViewById(R.id.gridView2); grid2.setFocusable(false); grid2.setAdapter(adapter2); grid2.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }); return rootView; } }

photosfragment2.java

<事前> <コード> public class PhotosFragment2 extends Fragment { private FragmentActivity myContext; @Override public void onAttach(Activity activity) { myContext = (FragmentActivity) activity; super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View rootView = inflater.inflate(R.layout.photos2, container, false); myContext.getActionBar().hide(); return rootView; } }

アクティビティXMLファイル

<事前> <コード> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/left_drawer_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@drawable/bgmenu" android:orientation="vertical"> <RelativeLayout android:id="@+id/profilelayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:paddingTop="10dp"> <ImageView android:id="@+id/drawer_profile_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/drawer_profile_background" android:layout_alignLeft="@+id/drawer_profile_background" android:layout_alignRight="@+id/drawer_profile_background" android:layout_alignTop="@+id/drawer_profile_background" android:layout_marginBottom="7.667dp" android:layout_marginLeft="6.5dp" android:layout_marginRight="8.3dp" android:layout_marginTop="7.667dp" android:scaleType="centerCrop"></ImageView> <ImageView android:id="@+id/drawer_profile_background" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:scaleType="centerCrop" android:src="@drawable/profileblock"> </ImageView> <ImageView android:id="@+id/settingicon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/drawer_profile_background" android:layout_marginLeft="-15dp" android:layout_toRightOf="@+id/drawer_profile_background" android:background="@drawable/settings" /> <textview android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/drawer_profile_background" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="Name" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@android:color/white" /> </RelativeLayout> <ListView android:id="@+id/list_slidermenu" style="@style/buttonStyle" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="30dp" android:layout_weight="2" android:cacheColorHint="@android:color/transparent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="1dp" android:listSelector="@android:color/transparent" android:scrollbars="none" /> </LinearLayout> </android.support.v4.widget.DrawerLayout>
英語

I am trying to move from one fragment to another.. It shows following error during fragment transaction-

    java.lang.IllegalArgumentException: No view found for id 0x1020002 (android:id/content) for fragment PhotosFragment2{41a57218 #3 id=0x1020002}             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:930)             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)             at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)             at android.os.Handler.handleCallback(Handler.java:615)             at android.os.Handler.dispatchMessage(Handler.java:92)             at android.os.Looper.loop(Looper.java:153)             at android.app.ActivityThread.main(ActivityThread.java:5086)             at java.lang.reflect.Method.invokeNative(Native Method)             at java.lang.reflect.Method.invoke(Method.java:511)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)             at dalvik.system.NativeStart.main(Native Method) 

Below are the classes.I have used following code for fragment transaction

Fragment fragment = new PhotosFragment2();                          FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();                         fragmentTransaction.replace(android.R.id.content, fragment);                         fragmentTransaction.commit(); 

PhotosFragment.java

   public class PhotosFragment extends Fragment {         private FragmentActivity myContext;         @Override         public void onAttach(Activity activity) {             myContext = (FragmentActivity) activity;             super.onAttach(activity);         }          @Override         public View onCreateView(LayoutInflater inflater, ViewGroup container,                                  Bundle savedInstanceState) {              View rootView = inflater.inflate(R.layout.photos, container, false);              rootView.setVerticalScrollBarEnabled(false);             int[] mThumbIds = {                     R.drawable.album8, R.drawable.album3,                     R.drawable.album4, R.drawable.album8,                     R.drawable.album6, R.drawable.album7,                     R.drawable.album12, R.drawable.album10,             };              int[] mThumbIds2 = {                     R.drawable.album8, R.drawable.album3,                     R.drawable.album4,                     R.drawable.album6, R.drawable.album7,                     R.drawable.album9, R.drawable.album10,                     R.drawable.album11, R.drawable.album12, R.drawable.album8,                     R.drawable.album8, R.drawable.album3,                     R.drawable.album4,                     R.drawable.album6, R.drawable.album7,                     R.drawable.album9, R.drawable.album10,                     R.drawable.album11, R.drawable.album12, R.drawable.album8,             };              CustomGridSingle2 adapter = new CustomGridSingle2(myContext, mThumbIds);             GridView grid = (GridView)rootView.findViewById(R.id.gridView);             final ImageView img= (ImageView)rootView.findViewById(R.id.imageView7);             grid.setFocusable(false);              grid.setAdapter(adapter);     grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {         @Override         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {             Fragment fragment = new PhotosFragment2();              FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();             fragmentTransaction.replace(android.R.id.content, fragment);             fragmentTransaction.commit();         }     });             CustomGridSingle2 adapter2 = new CustomGridSingle2(myContext, mThumbIds2);             GridView grid2 = (GridView)rootView.findViewById(R.id.gridView2);             grid2.setFocusable(false);             grid2.setAdapter(adapter2);             grid2.setOnItemClickListener(new AdapterView.OnItemClickListener() {                 @Override                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                     Fragment fragment = new PhotosFragment2();                      FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();                     fragmentTransaction.replace(android.R.id.content, fragment);                     fragmentTransaction.commit();                 }             });              return rootView;         }       } 

PhotosFragment2.java

public class PhotosFragment2 extends Fragment {     private FragmentActivity myContext;     @Override     public void onAttach(Activity activity) {         myContext = (FragmentActivity) activity;         super.onAttach(activity);     }     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         View rootView = inflater.inflate(R.layout.photos2, container, false);         myContext.getActionBar().hide();         return rootView;     } } 

Activity xml file

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent">       <FrameLayout         android:id="@+id/frame_container"         android:layout_width="match_parent"         android:layout_height="match_parent" />      <LinearLayout         android:id="@+id/left_drawer_view"         android:layout_width="wrap_content"         android:layout_height="match_parent"         android:layout_gravity="start"         android:background="@drawable/bgmenu"         android:orientation="vertical">          <RelativeLayout             android:id="@+id/profilelayout"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:layout_weight="0"             android:paddingTop="10dp">               <ImageView                 android:id="@+id/drawer_profile_image"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_alignBottom="@+id/drawer_profile_background"                 android:layout_alignLeft="@+id/drawer_profile_background"                 android:layout_alignRight="@+id/drawer_profile_background"                 android:layout_alignTop="@+id/drawer_profile_background"                 android:layout_marginBottom="7.667dp"                 android:layout_marginLeft="6.5dp"                 android:layout_marginRight="8.3dp"                 android:layout_marginTop="7.667dp"                 android:scaleType="centerCrop"></ImageView>               <ImageView                 android:id="@+id/drawer_profile_background"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_centerHorizontal="true"                 android:scaleType="centerCrop"                 android:src="@drawable/profileblock">              </ImageView>              <ImageView                 android:id="@+id/settingicon"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_alignBottom="@+id/drawer_profile_background"                 android:layout_marginLeft="-15dp"                 android:layout_toRightOf="@+id/drawer_profile_background"                 android:background="@drawable/settings" />              <textview                 android:id="@+id/username"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_below="@+id/drawer_profile_background"                 android:layout_centerHorizontal="true"                 android:layout_marginTop="5dp"                 android:text="Name"                 android:textAppearance="?android:attr/textAppearanceListItemSmall"                 android:textColor="@android:color/white" />           </RelativeLayout>           <ListView             android:id="@+id/list_slidermenu"             style="@style/buttonStyle"             android:layout_width="match_parent"             android:layout_height="0dp"             android:layout_marginTop="30dp"             android:layout_weight="2"             android:cacheColorHint="@android:color/transparent"             android:choiceMode="singleChoice"             android:divider="@android:color/transparent"             android:dividerHeight="1dp"             android:listSelector="@android:color/transparent"             android:scrollbars="none" />      </LinearLayout> </android.support.v4.widget.DrawerLayout> 
</div
     
         
         

回答リスト

30
 
vote
vote
ベストアンサー
 

fragmentTransaction.replace(R.id.container,fragment) を使用すると、すでにコンテナ内にあるフラグメントが削除され、新しいコンテナに追加します。

今すぐあなたに2つのことを提案することができます。 fragmentTransaction.replace(android.R.id.content, fragment); を使用したい場合は、 Activity を使用してコンテンツを設定しないでください。 <コード> setContentView 。これでうまく機能するはずです。このスタックオーバーフロー質問と回答

または2つ目に、 Activity のレイアウトには、 FrameLayout FrameLayout があります。そして

を使ってください <事前> <コード> fragmentTransaction.replace(R.id.content, fragment); fragmentTransaction.addToBackStack(null);//add the transaction to the back stack so the user can navigate back // Commit the transaction fragmentTransaction.commit();

これが役立つことを願っています。

詳細:

あなたのコメントから、<コード> fragmentTransaction.replace(android.R.id.content, fragment);0 のレイアウト(のいずれでもない)で FrameLayout を使用するという考えを得ることに問題があるようです。 fragmentTransaction.replace(android.R.id.content, fragment);1 のレイアウト)。文書

Framelayoutは、単一の項目を表示するために画面上の領域をブロックするように設計されています。一般に、Framelayoutは、互いに重なっているような異なるスクリーンサイズにスケーラブルになるような方法で子供の景色を整理するのが難しいかもしれないので、単一の子ビューを保持するために使用されるべきです。

だから fragmentTransaction.replace(android.R.id.content, fragment);2 の主な目的は、最大の子ビューに合わせた領域をブロックすることです。 fragmentTransaction.replace(android.R.id.content, fragment);3 fragmentTransaction.replace(android.R.id.content, fragment);4 コンテナとして使用すると、最大の<コード> fragmentTransaction.replace(android.R.id.content, fragment);5

のレイアウトに対応できるスペースを常に使用できるようにすることができます。では、 fragmentTransaction.replace(android.R.id.content, fragment);7 のレイアウトXMLファイル

で、 fragmentTransaction.replace(android.R.id.content, fragment);6 をこのようなものにすることができます。 <事前> <コード> fragmentTransaction.replace(android.R.id.content, fragment);8
 

When you use fragmentTransaction.replace(R.id.container,fragment) it will remove any fragments that are already in the container and add your new one to the same container.

Now i can suggest you 2 things.First, if you want to use fragmentTransaction.replace(android.R.id.content, fragment); which you are doing right now,then don't set content for your Activity using setContentView.This should work fine then.To know what exactly android.R.id.content is you can refer this stackoverflow question and answer

Or Secondly, In the layout of your Activity have a FrameLayout whose id is content. And then use

fragmentTransaction.replace(R.id.content, fragment);   fragmentTransaction.addToBackStack(null);//add the transaction to the back stack so the user can navigate back // Commit the transaction fragmentTransaction.commit();   

Hope this helps.

More Info:

From your comments it seems that you are having some problem in getting the idea of using FrameLayout in your Activity's layout(Not of any of the Fragment's layout).From the Documents

FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other.

So the main purpose of FrameLayout is to block the area required to fit the largest child view. If you use a FrameLayout as Fragment Container you can ensure that you always have the space available to accommodate the largest Fragment's layout.

So you can have your FrameLayout something like this in your Activity's layout xml file

<FrameLayout     android:id="@+id/content"     android:layout_height="match_parent"     android:layout_width="match_parent">  <!--you can put your existing views of your current xml here, so yes your entire xml is now inside this FrameLayout --> </FrameLayout> 
</div
 
 
         
         
23
 
vote

<コード> fragmentTransaction.replace(android.R.id.content, fragment);9 を使用しません。 Activity0 を使用して、それは私のために働きました。 あなたはそれを試すことができます。

 

I don't use getSupportFragmentManager(). I use getChildFragmentManager() and it worked for me. You can try it.

</div
 
 
 
 
16
 
vote

Activity1 Activity2 にしようとしている場合は、 Activity3

を使用します。
 

If you are trying to put Fragment into Fragment, use getChildFragmentManager()

</div
 
 
   
   
8
 
vote

ViewPagerを使用している場合は、Pager Adapter

にgetChildFragmentManager()を使用してください。 <事前> <コード> Activity4
 

If you are using ViewPager, use getChildFragmentManager() for pager adapter

viewPager.setAdapter(new ItemsAdapter(getChildFragmentManager())); 
</div
 
 
 
 
6
 
vote

あなたのPhotosFragmentが接続されているアクティビティにコンテンツビューを設定する必要があります。

<事前> <コード> Activity5
 

You have to set a content view in your Activity that your PhotosFragment is attached.

protected void onCreate(Bundle bundle) {     super.onCreate(bundle);     setContentView(R.layout.activity_main);      //... } 
</div
 
 
3
 
vote

この問題に最も一般的な理由が2つあります

  1. oncreate()メソッド
  2. のsetContentView()で誤ったレイアウトの指定
  3. エラーは、getChildFragmentManager()
  4. ではなく、getupportFragmentManager()をgetSupportFragmentManager()で追加した場合にも発生します。

    これが助けることを願っています

    要約

 

There are 2 most common reasons for this problem

  1. Specifying the wrong layout in setContentView() of the onCreate() method
  2. Error also occurs when having nested Fragments and adding them with getSupportFragmentManager() instead of getChildFragmentManager()

Hope this will help

Summved

</div
 
 
     
     
1
 
vote

私はこれが非常に遅いことを知っています。しかし、それは他人のために働くかもしれません。

私は各レイアウトのIDを宣言しました(3rd line bellow)

<事前> <コード> Activity6
 

i know this is very late. But it may work for other's.

I declared the id for each layout, like (3rd line bellow)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/container" 
</div
 
 
1
 
vote

Android 4.2(API 17)ネストされたフラグメントが利用可能になる。 この

他のフラグメントの内側に断片を配置する<コード> getChildFragmentManager()

サポートライブラリでも利用可能です。

 

Since Android 4.2 (API 17) nested fragments become avaliable. See this

To place fragment inside other fragment use getChildFragmentManager()

Also available in support library.

</div
 
 
1
 
vote

私は同じエラーを持っていました、そして私が問題が "id"と "getactivity()であることを私が見つけたことをたくさんのことを試みた後、getSupportFragmentManager()"。

私はこれらの

を実装する前に <事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } });

それから私はこれらの

に変更しました <事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } });
 

I had the same error and after trying a lot of things I found that the problem was with the "id" and "getActivity().getSupportFragmentManager()".

Before i implement i like these

txt_more.setOnClickListener(new View.OnClickListener() {                 @Override                 public void onClick(View view) {                      getChildFragmentManager()                             .beginTransaction()                             .replace(R.id.content_frame, new OpportunitiesFragment())                             .commit();                }              }); 

Then i changed to these

 txt_more.setOnClickListener(new View.OnClickListener() {                     @Override                     public void onClick(View view) {     ## Heading ##                         getActivity().getSupportFragmentManager()                                 .beginTransaction()                                 .replace(android.R.id.content, new OpportunitiesFragment())                                 .commit();                }                 }); 
</div
 
 
0
 
vote

PhotosFragment2 OnCreateViewメソッドにこのコードブロックを入れる方法:

<事前> <コード> View rootView = inflater.inflate(R.layout.photos2, null);

<事前> <コード> View rootView = inflater.inflate(R.layout.photos2, container, false);
 

Put this block of code in PhotosFragment2 onCreateView method:

View rootView = inflater.inflate(R.layout.photos2, null); 

instead of:

View rootView = inflater.inflate(R.layout.photos2, container, false); 
</div
 
 
   
   
0
 
vote

私の場合私は変更しなければならなかった

<事前> <コード> ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample, container);

<事前> <コード> ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample, container, false);
 

in my case I had to change

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample,                 container); 

to

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample,                 container, false); 
</div
 
 
0
 
vote

この答えは、断片化のときに発生する可能性がある、または断片に変換しているときに発生する可能性がある愚かな間違いを強調しています。

断片内の断片を fragmentManager に置き換えようとしている場合は、が問題を引き起こす可能性がある親フラグメントを膨張させていません。

basefragment.java <コード> OnCreateView :

<事前> <コード> if (savedInstanceState == null) { getFragmentManager().beginTransaction() .replace(R.id.container, new DifferentFragment()) .commit(); } return super.onCreateView(inflater, container, savedInstanceState);

txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 0 を置き換える フラグメントの正しいレイアウトを膨張させること:

<事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 1
 

This answer highlights a silly mistake that may occur, that arises when nesting fragments or you are converting activities to fragments.

If you are trying to replace a fragment within a fragment with the fragmentManager but you are not inflating the parent fragment that can cause an issue.

In BaseFragment.java OnCreateView:

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

Replace super.onCreateView(inflater, container, savedInstanceState); with inflating the correct layout for the fragment:

        return inflater.inflate(R.layout.base_fragment, container, false); 
</div
 
 
0
 
vote

問題は、断片のようなフラグメントと物乞いを追加することが

<事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 2

<コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 3 への<コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 4

それからすべてがうまくいく

フラグメントにフラグメントを追加するとき<コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 5 または<コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 6 は、アクティビティではなくフラグメントのルートコンテナを表します。だから txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 7 に変更する

 

The problem may be that you add a fragment and beginTransaction in some fragment like

getFragmentManager().beginTransaction().replace(android.R.id.content, ImageBrowseFragment.newInstance(bundle),"ImageBrowseFragment")             .addToBackStack(null).commit(); 

I just change getFragmentManager() to getActivity().getSupportFragmentManager()

Then everything goes fine

When you add a fragment in a fragment use android.R.id.content Or Window.ID_ANDROID_CONTENT,I guess it represents the root container of your fragment not the activity. So change to getActivity().getSupportFragmentManager() works it out

</div
 
 
0
 
vote

フラグメント(ページ)で txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 8 を使用し、ページから新しいフラグメントを表示しようとすると、このエラーが発生します。 txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 0 のページから<コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } }); 9 のコンテナを参照することはできません。

この場合は、 txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 1 を呼び出す必要があります。その後、 txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 2 新しいフラグメントを開くメソッドを書き込みます。

<事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 3

txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 4 を呼び出して新しいフラグメントを追加した場合は、 txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 5

の中に新しいフラグメントを配置します。 <事前> <コード> txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } }); 6
 

If you use ViewPager with fragments (pages) and try to show a new fragment from a page, you will get this error. I think, you cannot reference to a container of an Activity from a ViewPager's page.

In this case you should call getActivity(). Then in Activity write a method that will open a new fragment.

class YourActivity : AppCompatActivity() {      fun showNewFragment(title: String) {         val fm = supportFragmentManager         fm?.beginTransaction()?.apply {             val fragment = NewFragment.newInstance(title)             replace(R.id.container, fragment, NewFragment.TAG)             addToBackStack(null)         }?.commit()     } }  class PageFragment : Fragment() {      private fun show() {         (activity as YourActivity).showNewFragment("New fragment")     } }     

If you call getParentFragment() and add a new fragment, then you will place a new fragment inside ViewPager:

class ViewPagerFragment : Fragment() {      fun showNewFragment(title: String) {         val fm = childFragmentManager         fm?.beginTransaction()?.apply {             val fragment = NewFragment.newInstance(title)             replace(R.id.container, fragment, NewFragment.TAG)             addToBackStack(null)         }?.commit()     } }  class PageFragment : Fragment() {      private fun show() {         (parentFragment as? ViewPagerFragment)?.showNewFragment("New fragment")     } } 
</div
 
 
0
 
vote

呼び出し中のフラグメントIDが、oncreateメソッドのSetContentにリストされているクラスにあることを確認してください。私の場合は、リアウトを線形から制約に編集していました。ワーキングコードを台無しにしないように、oncreateに編集されたレイアウトが編集されたレイアウトであるため、別のレイアウトを処理しましたが、プロセス内のIDをめちゃくちゃにしましたが、呼び出されているフラグメントは古いレイアウトからのものでした。どうやら、新しいレイアウトでは、私はそれに異なるID名を与えました。 Ctrl + Shift + Fを使用してフラグメントのIDを検索し、検索結果がoncreateメソッドで指定したレイアウトを指すかどうかを確認します。 goodluck。

 

Make sure the fragment id you are calling is in the class listed in setcontent in onCreate method. For my case, I was editing the layout from linear to constraint. So as not to mess with the working code, I made another layout but messed an id in the process so that what was on oncreate was the edited layout but the fragment being called was from the old layout. Apparently, in the new layout I gave it a different id name. Search the id of your fragment using ctrl+shift+f and see if the search results point to the layout you specified in the oncreate method. Goodluck.

</div
 
 
0
 
vote

起こり得る最も一般的な間違いは、複数のバージョンのXMLレイアウト(v21とv23と言いましょう)を持ち、 <fragment> タグのXMLのみを追加した場合(または)逆に)。 そのため、両方のバージョンで<コード> <fragment>

 

The most common mistake that can be happened is, If you have more than one version of XML layout (let say v21 and v23) and you added <fragment> tag in lower version of XML only (or vice-versa). So, please check you added <fragment> tag (or pageGroup, etc) in both of the versions.

</div
 
 
 
 

関連する質問

5  フラグメントトランザクションのときに凍結UI  ( Freezing ui when fragment transaction ) 
FragmentManagerを使用してフラグメントを置き換えることで問題に直面しています。私の問題はUIを凍結しています。私の問題を処理するためにいくつかの良い慣習や図書館を見つけようとしています。 コードの一部: 主な活動のレイアウト: <事前> <コー...

1  FragmentTransactionアニメーションが機能していますが、グリッチが見えます  ( Fragmenttransaction animation is working but appears glitchy ) 
私は私のアプリで断片を正しく動くことができましたが、私が彼らに望んでいたように正しく動くように、アニメーションと矛盾する何かがあります。 より具体的にする:私は2フレームと3つのフラグメントを持つ活動をしています。 2つは静止しており、3番目は左から右へ移動し...

17  AddToSbackStackには大丈夫ですか、フラグメントトランザクションに置き換えますか?  ( Is it ok to addtobackstack and replace in a fragment transaction ) 
次のコードについての考え?私のテストでは、私は置き換えられた断片が破壊されず、インスタンスは後ろのスタックをポップするときにまだその中にあることがわかりました。これがフラグメントトランザクションを使用するための有効な方法であることを確認しようとしています。 <...

1  破片に追加した後にフラグメントが正しく交換されない  ( Fragment is not replacing properly after adding it to backstack ) 
私は私の活動に5つの断片を持っています。 フラグメントAはデフォルトである。 と他のフラグメントをすべてのフラグメントに切り替えるためのスライドメニューがあります。 だから私はバックスタックにのみフラグメントを追加したいです。 AからフラグメントB / C ...

0  EclipseでActionBarsherLocksのデモを読み込むエラー  ( Error loading actionbarsherlocks demos on eclipse ) 
ActionBarsherLockでデモをロードしようとしましたが、 FragmentTransaction1 を使用してアクティビティにエラーが発生しました。アクティビティは FeatureToggles および<コード> TabNavigation です...

0  動的に追加されたフラグメントのRecyclerviewでカスタムビューの状態を保存する方法  ( How to save a custom views state in a recyclerview in a dynamically added fragm ) 
tl; dr: <コード> View RecyclerView の呼び出しを<コード> onBindViewHolder に区別できません。 >または<コード> Fragment を置き換える。 私はここでここで答えを探してたくさん過ごしましたが、最後に...

512  IllegalStateException:ViewPagerを使用したOnSaveInstantateの後にこのアクションを実行できません  ( Illegalstateexception can not perform this action after onsaveinstancestate wit ) 
私は市場で私のアプリからユーザーレポートを取得しています、次の例外を提供します: <事前> <コード> java.lang.IllegalStateException: Can not perform this action after onSaveInsta...

1  ListFragment OnListItemClick働きません  ( Listfragment onlistitemclick not working ) 
昇格可能な例でタブレイアウトを使用していますが、タブのONがリストビューで、リスト項目をクリックしたら新しいフラグメントが開きます。私の問題は私がリスト項目をクリックすると、何も起こっていません。 次の例を使用していて、Code Androidhive.inf...

13  NullPointerException:fragmentManager.BeginTransaction()  ( Nullpointerexception fragmentmanager begintransaction ) 
最初のフラグメントからフラグメントを起動しようとしている間にこのエラーを得ています: <事前> <コード> app/views/userscuentas/index.html.erb4 ここにエラーが発生している方法があります: <事前> <コード> app...

24  AndroidのナビゲーションドロワーLAG  ( Navigation drawer lag on android ) 
私はナビゲーション引き出しに問題があります、それは私が探している解決策は最初に引き出しを閉じることです、そしてそれから活動を見せることは働いていません、確かに私は何かを欠けていません。 <事前> <コード> private class DrawerItemC...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有