2017-01-28 12 views
0

私のアプリには2つのアクティビティがあります。 MainActivityでは、私は2つのフラグメントFragment1Fragment2をロードしています。 Fragment1から私はFragment2にジャンプしていますし、Fragment2から私はMainActivityFragment2に戻ってジャンプしたいFragment 2_1からFragment2_1が含まれているActivity2にジャンプしていますが、私はこれを行うにしようとすると、私はエラーを取得しています。異なる活動からの2つのフラグメント間の通信?

私は、1つのアクティビティフラグメントから別のアクティビティフラグメントにジャンプすることは可能ですか?

私のコードは次のとおりです。

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction(); 
     Fragment fragment1=new Fragment1(); 
     fragmentTransaction.replace(R.id.mainContainer,fragment1,"MainActivity"); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 


    } 
} 

Fragment1.java:

public class Fragment1 extends Fragment { 


    public Fragment1() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view=inflater.inflate(R.layout.fragment_fragment1, container, false); 
     Button buttonfrag1=(Button)view.findViewById(R.id.buttonfrag1); 
     buttonfrag1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentManager fragmentManager=getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
       Fragment2 fragment2 = new Fragment2(); 
       fragmentTransaction.replace(R.id.mainContainer,fragment2,"Fragment1"); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 

      } 
     }); 

     return view; 
    } 

Fragment2.java

public class Fragment2 extends Fragment { 


    public Fragment2() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view= inflater.inflate(R.layout.fragment_fragment2, container, false); 
     Button buttonfrag2=(Button)view.findViewById(R.id.buttonfrag2); 
     buttonfrag2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent=new Intent(getActivity(),Activity2.class); 
       startActivity(intent); 

      } 
     }); 

     return view; 

    } 

} 

Activity2.java

public class Activity2 extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_2); 
     FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction(); 
     Fragment2_1 fragment2_1=new Fragment2_1(); 
     fragmentTransaction.replace(R.id.frag2_1,fragment2_1,"Activity2"); 
     fragmentTransaction.commit(); 


    } 
} 

Fragment2_1.java

public class Fragment2_1 extends Fragment { 


    public Fragment2_1() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false); 
     Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1); 
     buttonfrag2_1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction(); 
       Fragment2 fragment2=new Fragment2(); 
       fragmentTransaction.replace(R.id.mainContainer,fragment2,"frag2_1"); 
       fragmentTransaction.addToBackStack(null); 

       fragmentTransaction.commit(); 
      } 
     }); 

     return view; 
    } 

} 

すべてのコードが正常に動作しますが、私は例外を除いて私のアプリがクラッシュをFragment1するFragment2_1から移動したいとき:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1} 
+0

あなたは答えを得ましたか?下の私の答えをチェックしてください。 @champadorid –

答えて

1

これを試してみてください。Fragment2_1に

buttonfrag2_1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(getActivity(), MainActivity.class); 
        intent.putExtra("frag", "fragment2"); 
        startActivity(intent); 
       } 
      }); 

今Mainactivity onResume()あなたは、コンテナR.id.mainContainerFragment2を配置しようとしている2番目の活動の中にあなたのFragment2_1MainActivity

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

    Intent intent = getIntent(); 

if(intent.getExtras() != null) 
{ 
String frag = intent.getStringExtra("frag"); 
} 


    switch(frag){ 

    case "fragment2": 
     //here you can load Fragment2 to your activity as usual; 
     fragmentManager.beginTransaction().replace(R.id.mainContainer, new Fragment2()).commit(); 
     break; 
    } 
} 
+0

お返事ありがとうございます。あなたの答えで私はアクティビティ2にいます。ユーザーがFragment2_1のボタンをクリックすると、再びFragment2に移動します。 – Champandorid

+0

この 'fragmentTransaction.replace(R.id.frag2_1、fragment2、" frag2_1 ");あなたの 'Fragment2_1'に' Fragement2'に行くために – rafsanahmad007

+0

フラグメント2へのトランザクション中にあなたが間違ったIDをfragment2_1に渡しているので例外が発生します – rafsanahmad007

0

maincontainer

でご希望のフラグメントをロードします。あなたのコードは以下の通りです:

しかし、あなたは現在、コンテナが存在しない(これはあなたの最初のアクティビティの一部です)あなたの2番目のアクティビティの中にいるためです。 MainActivityをもう一度ロードするか、Activity2finish()と呼んで終了する必要があります。あなたが後でアンドロイドを行う場合は、MainActivityに戻ります。Activity2からFragment2に移動したので、アンドロイドもそのことを覚えており、Fragment2を表示します。

あなたFragment2_1は次のようになります。

public class Fragment2_1 extends Fragment { 

    public Fragment2_1() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false); 
     Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1); 
     buttonfrag2_1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       getActivity().finish(); 
      } 
     }); 

     return view; 
    } 

} 

OR、あなたはちょうどあなたがこのような何かを行うことができ、あなたの第二の活動にFragment2を表示したい場合は、次の

public class Fragment2_1 extends Fragment { 


    public Fragment2_1() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false); 
     Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1); 
     buttonfrag2_1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction(); 
       Fragment2 fragment2=new Fragment2(); 
       fragmentTransaction.replace(R.id.frag2_1,fragment2,"frag2"); 
       fragmentTransaction.addToBackStack(null); 

       fragmentTransaction.commit(); 
      } 
     }); 

     return view; 
    } 

} 

R.id.frag2_1をフラグメントを置き換える必要があるコンテナです。

注:あなたはまだ2回目のアクティビティに参加します。断片だけが置き換えられます。

+0

問題はそれです。私は第二の活動を終えることができません。 – Champandorid

+0

@champadoridあなたができない、したくないですか? –

+0

@Champandorid更新された回答を確認してください。 –

関連する問題