activity_main.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/content_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/detail_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity implements NewsFragment.OnNewsSelectedListener {
private NewsFragment newsFragment;
private DetailFragment detailFragment;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
newsFragment = (NewsFragment) fragmentManager.findFragmentByTag("news");
if (newsFragment == null) {
newsFragment = new NewsFragment();
}
fragmentManager.beginTransaction()
.replace(R.id.content_layout, newsFragment, "news")
.commit();
}
@Override
public void onNewsSelected(News news) {
detailFragment = DetailFragment.newInstance(news);
fragmentManager.beginTransaction()
.replace(R.id.detail_layout, detailFragment)
.addToBackStack(null)
.commit();
}
}
NewsFragment.java:
public class NewsFragment extends Fragment {
private OnNewsSelectedListener listener;
public interface OnNewsSelectedListener {
void onNewsSelected(News news);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnNewsSelectedListener) {
listener = (OnNewsSelectedListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnNewsSelectedListener");
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);
// view initialization and event handling
return view;
}
// other fragment lifecycle methods and logic
}