アクティビティとフラグメントのデータ渡し部分を確認する。
【MainActivity.java】
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.commitNow();
View view = (View)findViewById(R.id.container);
view.setOnTouchListener((MainFragment)mFragment);//フラグメントへタッチイベント通知。
//implements View.OnTouchListener で通知を受け取る準備。
【MainFragment.java】
public class MainFragment extends Fragment implements View.OnTouchListener {
private MainViewModel mViewModel;
public static MainFragment newInstance(String path) {
MainFragment mainFragment = new MainFragment();// インスタンス生成
Bundle args = new Bundle();// Bundle にパラメータを設定
args.putString("test", path);
mainFragment.setArguments(args);
return mainFragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@SuppressLint("FragmentLiveDataObserve")
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle args = getArguments();// Bundle にパラメータを取得
if(args != null ){
String path = args.getString("test");
TextView text = view.findViewById(R.id.message);
text.setText(path);
}
mViewModel = new ViewModelProvider(this).get(MainViewModel.class);//ViewModel設定
final Observer< String> nameObserver = new Observer< String>() {//LiveData設定
@Override
public void onChanged(@Nullable final String newName) {
TextView text = view.findViewById(R.id.message);
text.setText(newName);
}
};
mViewModel.getPathName().observe(this, nameObserver);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
mViewModel.getPathName().setValue("ファイルパス");//テスト。タップで受け渡しができていれば文字が変わる。
return false;
}
}
【MainViewModel.java】
public class MainViewModel extends ViewModel {
private MutableLiveData< String> targetPath;//LiveData
public MutableLiveData< String> getPathName() {
if (targetPath == null) {
targetPath = new MutableLiveData< String >();
}
return targetPath;
}
}
とりあえず、データの受け渡しは意外と楽そう。
タッチイベントも送信側と受信側の準備をする。という事で問題ない。
過去の日記を見ると七転八倒しているな^^;
何事も積み重ねである(笑)
次は複数のフラグメントを移動して、Assetsフォルダに用意した画像をそれぞれ表示する。