我正在学习Android,因为活动和片段之间的沟通,我陷入了“片段篇”。让我来介绍一下我的问题:
得到MainActivity
,我分别绑定了2个片段AlimentFragment
和DetailAlimentFragment
使用,
横向方向:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="supersk.training.android.gestionstock.AlimentFragment"
android:id="@+id/fgt_aliment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
</fragment>
<fragment android:name="supersk.training.android.gestionstock.DetailAlimentFragment"
android:id="@+id/fgt_detail"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
纵向方向:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fgt_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在我的MainActivity
上,我定义了一个覆盖我AlimentFragment
类中定义的接口方法的方法:
@Override
public void onAlimentSelection(Aliment aliment) {
// l'utilisateur selectionne un item dans la liste depuis AlimentFragment
Log.d(MainActivity.class.getSimpleName(), "[onAlimentSelection] method triggered !");
DetailAlimentFragment detailFragment = (DetailAlimentFragment)
getSupportFragmentManager().findFragmentById(R.id.fgt_detail);
if (detailFragment != null ){
// si le fragment est disponible, on est en double vue
detailFragment.updateDetailAliment(aliment);
} else {
// si le fragment n'est pas disponible, on est en simple vue
// on créée le fragment et lui passe l'item selectionné
DetailAlimentFragment newDetailFragment = new DetailAlimentFragment();
Bundle args = new Bundle();
args.putParcelable(ARG_ALIMENT, aliment);
newDetailFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fgt_container, newDetailFragment);
transaction.addToBackStack(null);
// Valider la transaction
transaction.commit();
}
}
用户流程互动:
AlimentFragment
)DetailAlimentFragment
正确更新
在左边NullPointerException
在第5步,我发现修复异常的方式是:
if (detailFragment != null && findViewById(R.id.fgt_container) == null) {
而不是:
if (detailFragment != null ){
问题:
当我从风景改为肖像时,我的DetailAlimentFragment
仍然存在,但为什么?每次我以纵向方向点击项目时,我应该拨打一些DetailActivity
吗?
如果您需要更多样品,请告诉我! ;)
答案 0 :(得分:0)
我终于找到了一些有用的帮助。
在Android Studio&#34;新项目&#34;中,我可以选择模板&#34;主/详细流程&#34;活动生成有用的代码片段以便掌握它。