2016-12-20 16 views
-2

私の状況はアクティビティ(FrameLayoutのみ)ですが、1つのフラグメントに機能が2番目のfragmnetに変更されていますが、置換とコミットを設定すると失敗します。 私はこの機能を成功させるためにbrforeを試みましたが、現在は機能していません。 誰にでも問題を教えてもらえますか?それは感謝します。アンドロイドのフラグメントは2番目のフラグメントに置き換えられます

最初の断片コード:

public class StartPage extends Fragment implements View.OnClickListener { 

    } 
    public static StartPage newInstance() { 
     return new StartPage(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.start_page_fragment, container, false); 

     //findViews(); 
     imageRegistered = (ImageView) view.findViewById(R.id.imageRegistered); 
     imageRegistered.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentManager fragment=getFragmentManager(); 
       FragmentTransaction transaction=fragment.beginTransaction(); 
       transaction.replace(R.id.frameStartPage,Register.newInstance(),null); 
       transaction.commit(); 
       Toast.makeText(getActivity(),"Test",Toast.LENGTH_SHORT).show(); 

      } 
     }); 
     return view; 
    } 

、それは活動の私でframeLayoutです:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/frameStartPage" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.huaweb_system.taiwanuniversityhome.MainActivity"> 

</FrameLayout> 

MainActivity:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.hide(); 

     if (savedInstanceState == null) { 
      FragmentManager manager = getSupportFragmentManager(); 
      FragmentTransaction transaction = manager.beginTransaction(); 
      transaction.replace(R.id.frameStartPage, StartPage.newInstance()); 
      transaction.commit(); 
     } 
    } 
} 

第2のフラグメント:

public class Register extends Fragment implements View.OnClickListener { 

    public static StartPage newInstance() { 
     return new StartPage(); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.register_activity, container, false); 

     findViews(); 
     return view; 
    } 
} 
+0

使用' getChildFragmentManager() ')のようなあなたの登録フラグメントのnewInstanceメソッドを変更する必要があります

。したがって' –

+0

私でframeLayoutが活動上で、それは巣フラグメントではありませんので、私getChildFragmentManager()は正しいとは思わないが、試しても結果はクラッシュし、エラーメッセージはE/FragmentManager:ID 0x7f0d0073のビューが見つからない アドバイスありがとうございます。 –

+0

フラグメントのレイアウトを表示しますか?フラグメントのIDを追加しましたか? –

答えて

1

実際にnew演算子を使用してインスタンスを取得し、newInstance()静的メソッドを使用することは同じです。

問題は、あなたのコードである:あなたが断片スタートページとレジスタの両方に同じ方法を使用している

public static StartPage newInstance() { 
    return new StartPage(); 
} 

。あなたが代わりに `getFragmentManager(この

public static Register newInstance() { 
    return new Register(); 
} 
+0

私は今あなたの間違いを見つけました。ありがとうございます。 –

関連する問題