Android Handlerで指定時間後にFragmentを書き換えるサンプル
ActivActivity から 動的にFragmentを呼び出した状態 から、Fragmentを入れ替える。
https://github.com/pppiroto/KaigiUtil/tree/c043c2b7ba37827ac39cc8420781b8a17b234802
入れ替えるのに、指定時間ウェイトする。
指定時間ウェイトするには、Handler.postDelayed() を使って、指定時間後にRunnableを実行するように設定。Runnableの処理は、Handlerがアタッチされたスレッド(UIスレッド)で実行されるため、Runnableの中で、呼び出し元のメソッドを呼び出すことができる。
Fragmentは、FragmentTransaction.replace() を用いてコンテナに追加されているFragmentを置き換える。
package info.typea.kaigiutil.contents.dummycall; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import info.typea.kaigiutil.R; public class DummyCallingFragment extends Fragment implements View.OnClickListener { private static final String ARG_MSG = "message"; public DummyCallingFragment() { } public static DummyCallingFragment newInstance(String message) { DummyCallingFragment fragment = new DummyCallingFragment(); Bundle args = new Bundle(); args.putString(ARG_MSG, message); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment_dummy_calling, container, false); view.findViewById(R.id.btn_dummy_calling).setOnClickListener(this); return view; } private void dummyCallback() { Toast.makeText(this.getContext(), "Call back", Toast.LENGTH_LONG).show(); FragmentManager fragmentManager = this.getActivity().getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_fragment_container, CallingScreenFragment.newInstance("test message")) .addToBackStack(null) .commit(); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.btn_dummy_calling: Handler hander = new Handler(); hander.postDelayed(new Runnable() { @Override public void run() { dummyCallback(); } }, 10000); break; default: break; } } }