現在、バンドルを使用して、IncomeFragment と ExpenseFragment の両方から HomeFragment に情報を転送しようとしていますが、その方法がわかりません。彼が提供した doubleA のコードを実装してみました。
これは、関連するフラグメントから総収入/支出の値を取得し、それを HomeFragment に転送する MainActivity からの onAcceptClicked メソッドです。
public void onAcceptClicked(String fragment, String total) {
final FragmentManager fm = getFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
if (fragment == "income") {
HomeFragment homeFrag = new HomeFragment();
Bundle incomeBundle = new Bundle();
incomeBundle.putString(IncomeFragment.TAG, total);
//homeFrag.newInstance(total);
ft.replace(R.id.content_layout, homeFrag, HomeFragment.TAG);
ft.commit();
}
else if (fragment == "expense"){
HomeFragment homeFragment = new HomeFragment();
Bundle expenseBundle = new Bundle();
expenseBundle.putString("bundleIncome", total);
homeFragment.setArguments(expenseBundle);
ft.replace(R.id.content_layout, homeFragment, HomeFragment.TAG);
ft.commit();
}
}
私は、IncomeFragment に MainActivity との通信に使用するインターフェイスを持っているので、onAcceptClicked メソッドを使用して合計を転送できます。ExpenseFragment でも基本的に同じことを行う予定です。以下のコードは、IncomeFragment からの抜粋です。
public interface SendIncomeData {
public void onAcceptClicked(String fragment, String total);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_accept:
//Toast.makeText(getActivity(), stringIncomeTotal, Toast.LENGTH_LONG).show();
sendIncomeData.onAcceptClicked("income", stringIncomeTotal);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
残念ながら、このコード行でエラーが発生します
sendIncomeData.onAcceptClicked("income", stringIncomeTotal);
これがエラーです
java.lang.NullPointerException: Attempt to invoke interface method 'void mos.myapplication.IncomeFragment$SendIncomeData.onAcceptClicked(java.lang.String, java.lang.String)' on a null object reference
null オブジェクト参照があると言っている理由や、このエラーを修正する方法がわかりません。
MainActivity または IncomeFragment / ExpenseFragment のコード内のどこにも以下のメソッドを呼び出していないため、HomeFragment に合計を表示する際にエラーが発生する可能性があると推測しています。私がそれを使用していない理由は、アプリケーションの起動時に HomeFragment が最初に開くようにする方法がわからなかったためです。
static HomeFragment newInstance(String total)
{
HomeFragment frag = new HomeFragment();
Bundle args = new Bundle();
args.putString(TAG, total);
frag.setArguments(args);
return frag;
}
合計を転送して、IncomeFragment > HomeFragment および ExpenseFragment > HomeFragment から表示できる限り、ゼロから始めてもかまいません。