私のアプリでは、2つのフラグメント:fragmentDiary
とfragmentCal
があります。私はfragmentDiary
にfragmentCal
から電話しようとしています。私はこの目的のために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();
}
}
これはなぜ機能しますか? '(新しいMainActivity).callFragmentDiary'の何が問題なのですか?なぜ、 'MainActivity'のオブジェクトを作成し、それを使ってその中の関数にアクセスできないのですか? – heathcliff
アクティビティはAndroid Frameworkによってインスタンス化されるためです。あなたは自分自身をインスタンス化するべきではありません。コードを実行しているインスタンスではなく、新しいインスタンスでメソッド 'callFragmentDiary'を呼び出しています。 –