sin*_*ory 5 android android-fragments
activity_fragment.xml的代码:
<?xml version="1.0" encoding="utf-8" ?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Run Code Online (Sandbox Code Playgroud)
CrimeListActivity.java的代码
package com.sinory.criminalintent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
public class CrimeListActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new CrimeListFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("CrimeListActivity", "create");
}
}
Run Code Online (Sandbox Code Playgroud)
SingleFragmentActivity.java的代码
package com.sinory.criminalintent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if (null == fragment) {
fragment = new CrimeListFragment();
fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
刚开始学习Android.为什么Fragment fragment = fm.findFragmentById(R.id.fragmentContainer)为空?请帮我.
Rez*_*adi 11
首先,您不需要检查片段是否为空,因为当一个活动销毁所有片段时也将被销毁.因此在活动onCreate中将没有片段,您需要在每次重新创建活动时添加它.
其次不要使用findFragmentById.在xml文件中定义片段时,只能使用此方法.既然您动态添加了片段,则需要指定字符串标记,然后使用该标记来查找片段.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().add(R.id.fragmentContainer, fragment,"TagName").commit();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要找到您的片段,只需使用此代码即可
Fragment fragment = fm.findFragmentByTag("TagName");
Run Code Online (Sandbox Code Playgroud)
2019年1月9日更新
自2018年起,您只需使用Google导航库在应用程序中的页面(片段)之间导航即可.它将处理所有事务,并使导航更容易和更清洁.在这里查看
https://developer.android.com/topic/libraries/architecture/navigation/
| 归档时间: |
|
| 查看次数: |
12089 次 |
| 最近记录: |