关于回退栈
fragment加载时如果被添加进回退栈,那么fragment的实例不会被销毁onDestroy()不会被调用,而是只到onDestroyView(),再回退时实例直接走的是onCreateView()方法
某种情况会需要清除之前加入回退栈的fragment 网上给出的方法是 但是会报错,通过trycatch捕获,然后 处理
if (getSupportFragmentManager().getFragments() != null
&& getSupportFragmentManager().getFragments().size() > 0) {
getSupportFragmentManager().getFragments().clear();
应该还有其他方法 参见 :http://www.cnblogs.com/qixing/p/4015262.html 本人没看懂
addbackstack("tag");的tag是栈的tag
add或者replace时,第三个参数就是fragemnt的tag
fragment和activity的通信
大神hongyang 详细说了: http://blog.csdn.net/lmj623565791/article/details/37992017
两种方法 ,这里 我觉得第一种方便一点 ,只列举第一种
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class FragmentOne extends Fragment implements OnClickListener
{
private Button mBtn;
/**
* 设置按钮点击的回调
* @author zhy
*
*/
public interface FOneBtnClickListener
{
void onFOneBtnClick();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_one, container, false);
mBtn = (Button) view.findViewById(R.id.id_fragment_one_btn);
mBtn.setOnClickListener(this);
return view;
}
/**
* 交给宿主Activity处理,如果它希望处理
*/
@Override
public void onClick(View v)
{
if (getActivity() instanceof FOneBtnClickListener)
{
((FOneBtnClickListener) getActivity()).onFOneBtnClick();
}
}
}
再activity中只需要 实现接口FOneBtnClickListener,写的方法就是要实现的方法
屏幕切换时,fragemnt其实不用再次实例化 在oncreat()方法里
if(savedInstanceState == null)
{
mFOne = new FragmentOne();
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.add(R.id.id_content, mFOne, "ONE");
tx.commit();
}
还有其他的。。。
android官方推荐 DialogFragment创建对话框