FragmentActivityにフラグメントがあります。このフラグメントはサーバーからデータをロードします。ユーザーが更新ボタンをクリックしてから、フラグメント内のメソッドを呼び出して更新プロセスを実行する必要があります。
FragmentActivityでインターフェイスを作成し、ユーザーが更新ボタンをクリックしたときにその変数を設定しました。コードは次のようになります。
public class MainScreen extends FragmentActivity {
public interface OnRefreshSelected {
public void refreshFragment(boolean flag);
}
private OnRefreshSelected onRefreshSelected;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "Try to create MainScreen...");
setContentView(R.layout.activity_main);
onRefreshSelected = (OnRefreshSelected) MainScreen.this;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_refresh:
onRefreshSelected.refreshFragment(true);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
そしてFragmentクラスで私はこのインターフェースを実装しました:
public class CategoryFragment extends Fragment implements OnRefreshSelected {
@Override
public void refreshFragment(boolean flag) {
Log.i(TAG, "refresh requested. Try to reload data for this fragment...");
getData();
}
}
実行すると、アプリケーションがクラッシュし、logcatに次のメッセージが表示されます。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.astro.recipe.activities/com.astro.recipe.activities.MainScreen}: java.lang.ClassCastException: com.astro.recipe.activities.MainScreen
そしてこの線を指します:
onRefreshSelected = (OnRefreshSelected) MainScreen.this;
ホストからフラグメントのメソッドにアクセスするための最良の方法は何ですか?任意の提案をいただければ幸いです。ありがとう