2017-04-03 29 views
0

私のアプリでは、2つのフラグメント:fragmentDiaryfragmentCalがあります。私はfragmentDiaryfragmentCalから電話しようとしています。私はこの目的のためにMainActivityに関数callFragmentDiary()を作った。したがって、fragmentCalから、MainActivityに存在するこの関数が呼び出されます。その後、この関数はMainActivityからfragmentDiaryを呼び出します。しかし、この関数では、次の行にjava.lang.IllegalStateExceptionが表示されます。java.lang.IllegalStateException:(アクティビティが破棄された)フラグメント内

ft.replace(R.id.container , fragDiary).commit(); 

関連するコードを以下に示します。fragmentCal.javaで

(new MainActivity()).callFragmentDiary(date); 

MainActivity

package com.example.nirvan.finaldiary; 

import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity { 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    fragmentDiary fragDiary = new fragmentDiary(); 
    fragmentCal fragCal = new fragmentCal(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ft.add(R.id.container,fragCal).commit(); 
    } 

    public void callFragmentDiary(int []date){ 
    Bundle bundle=new Bundle(); 
    bundle.putInt("day",date[0]); 
    bundle.putInt("month",date[1]); 

    fragDiary.setArguments(bundle); 
    ft.replace(R.id.container , fragDiary).commit(); 
    } 
} 

答えて

0

あなたはをインスタンス化210のようなものでなければなりませんが、((MainActivity)getActivity()).callFragmentdiaryのようになります。

また、onCreateメソッドの中にFragmentManagerを入れることをお勧めします。クラスマネージャがロード/インスタンス化されたときにフラグメントマネージャが設定されていない可能性があります。それを使用する場合にのみFragmentTransactionを作成してください。

+0

これはなぜ機能しますか? '(新しいMainActivity).callFragmentDiary'の何が問題なのですか?なぜ、 'MainActivity'のオブジェクトを作成し、それを使ってその中の関数にアクセスできないのですか? – heathcliff

+0

アクティビティはAndroid Frameworkによってインスタンス化されるためです。あなたは自分自身をインスタンス化するべきではありません。コードを実行しているインスタンスではなく、新しいインスタンスでメソッド 'callFragmentDiary'を呼び出しています。 –

関連する問題