Android Fragment 和 Activity
來自: http://blog.csdn.net//never_cxb/article/details/48136265
Android Fragment 和 Activity
為什么要使用Fragment
誤解:
網上搜了很多資料,都是fragment是為了手機和平板的適配用的, 這當然是fragment應用的一方面, 更多的應用是為了托管fragment</blockquote>
在 Activity 托管一個 UI Fragment, 如兩種方法
1 添加fragment到activity布局中, 在activity的onCreate()方法里引入布局@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
}</pre>
2 在activity代碼中添加 fragment , 用activity托管fragment
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 (fragment == null) { fragment = createFragment(); fm.beginTransaction() .add(R.id.fragmentContainer, fragment) .commit(); } }</pre>
}
第一張方法不靈活, 會把fragment視圖和activity視圖綁定在一起
第二種方法可以在運行時候控制fragment的方法, 我們可以決定何時將fragment添加到activity中以及隨后完成具體任務; 也可以移除fragment, 用其他fragment代替當前fragment
onCreate() 方法 比較
import android.support.v4.app.Fragment; public class SMSBombFragment extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true);}
}</pre>
Fragment.onCreat(Bundle) 是public 方法, 因為需要被托管fragment的任何activity調用
Activity.onCreate(Bundle)是protect方法
生成fragment視圖
在Fragment.onCreate(Bundle)中, 并沒有生成fragment的視圖, 雖然onCreate(Bundle)方法配置了fragment變量, 但創建和配置fragment視圖是通過下面的onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)完成的.
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_bomb, container, false);initView(v); setButtonListener(); return v;
}</pre>
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 生成的View返回給托管的Activity
</blockquote> </div>