Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnDetach/onAttach片段重建片段活性_Android_Fragment_Detach - Fatal编程技术网

Android OnDetach/onAttach片段重建片段活性

Android OnDetach/onAttach片段重建片段活性,android,fragment,detach,Android,Fragment,Detach,我想分离/附加我的片段,但如何设置,在附加后,该片段不会重新创建 在片段中,我有WebView;当我选择和取消选择选项卡时,webview将加载startpage 这是我的代码: public class MainActivity extends Activity implements OnClickListener, OnMenuItemClickListener { ActionBar bar; View v; public static TextView

我想分离/附加我的片段,但如何设置,在附加后,该片段不会重新创建

在片段中,我有WebView;当我选择和取消选择选项卡时,webview将加载startpage

这是我的代码:

  public class MainActivity extends Activity implements OnClickListener, OnMenuItemClickListener {


    ActionBar bar;
    View v;

     public static TextView tilt;
    LayoutInflater inflater;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        onAddTab();
        View v=getLayoutInflater().inflate(R.layout.action_bar, null);
         ImageButton im = (ImageButton)v.findViewById(R.id.tab_toggle);
        im.setOnClickListener(this);
        getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_layout));
        getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getActionBar().setCustomView(v);
        onToggleTabs();



        }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()){
        case R.id.tab_toggle:

            onAddTab();

            break;
        }

    }

    public void onAddTab() {
        final ActionBar bar = getActionBar();
        View v=getLayoutInflater().inflate(R.layout.layout_tab, null);
        tilt = (TextView)v.findViewById(R.id.tit_le);

        ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT); 
        lp.gravity = Gravity.CENTER;
        v.setLayoutParams(lp);
        closetab = (ImageButton)v.findViewById(R.id.close);
        closetab.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRemoveTab();


            }
        });

        bar.addTab(bar.newTab()
                .setCustomView(v)
                .setTabListener(new TabListener<Web>(this, "Tag A", Web.class)));

    }



    public void onRemoveTab() {
        final ActionBar bar = getActionBar();
        Tab tab = bar.getSelectedTab();

            bar.removeTab(tab);

    }

    public void onToggleTabs() {
        final ActionBar bar = getActionBar();


            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


    }

    public void onRemoveAllTabs(View v) {
        getActionBar().removeAllTabs();
    }




    public static class TabListener<T extends Fragment>  implements ActionBar.TabListener{

       private final Activity myActivity;
       private final String myTag;
       private final Class<T> myClass;

       public TabListener(Activity activity, String tag, Class<T> cls) {
           myActivity = activity;
           myTag = tag;
           myClass = cls;
       }

 @Override
 public void onTabSelected(Tab tab, FragmentTransaction ft) {

  Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

  // Check if the fragment is already initialized
        if (myFragment == null) {
            // If not, instantiate and add it to the activity
            myFragment = Fragment.instantiate(myActivity, myClass.getName());
            ft.add(R.id.fragment0, myFragment, myTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(myFragment);
        }

 }

 @Override
 public void onTabUnselected(Tab tab, FragmentTransaction ft) {

  Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

  if (myFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(myFragment);

        }

 }

 @Override
 public void onTabReselected(Tab tab, FragmentTransaction ft) {
  // TODO Auto-generated method stub

 }
    }
public类MainActivity扩展活动实现OnClickListener、OnMenuItemClickListener{
ActionBar;
观点五;
公共静态文本视图倾斜;
充气机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向);
onAddTab();
视图v=GetLayoutFlater()。充气(R.layout.action_bar,空);
ImageButton im=(ImageButton)v.findViewById(R.id.tab_切换);
im.setOnClickListener(this);
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_布局));
getActionBar().setDisplayOptions(ActionBar.DISPLAY\u SHOW\u CUSTOM);
getActionBar().setCustomView(v);
OnToggletab();
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
开关(v.getId()){
案例R.id.tab_切换:
onAddTab();
打破
}
}
公共无效onAddTab(){
最终ActionBar=getActionBar();
视图v=GetLayoutFlater()。充气(R.layout.layout_选项卡,空);
倾斜=(文本视图)v.findViewById(R.id.tit_le);
ActionBar.LayoutParams lp=新建ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_内容,ActionBar.LayoutParams.WRAP_内容);
lp.重心=重心;
v、 setLayoutParams(lp);
closetab=(ImageButton)v.findViewById(R.id.close);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
onRemoveTab();
}
});
bar.addTab(bar.newTab()
.setCustomView(v)
.setTabListener(新的TabListener(这个“标记A”,Web.class));
}
公共无效onRemoveTab(){
最终ActionBar=getActionBar();
Tab Tab=bar.getSelectedTab();
杆。移除选项卡(选项卡);
}
公共图书馆{
最终ActionBar=getActionBar();
设置导航模式(操作栏导航模式选项卡);
}
RemoveAllTabs上的公共无效(视图v){
getActionBar().removeAllTabs();
}
公共静态类TablListener实现ActionBar.TablListener{
私人最终活动;
私有最终字符串myTag;
私人期末班myClass;
公共TabListener(活动、字符串标记、类cls){
我的活动=活动;
myTag=tag;
myClass=cls;
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
Fragment myFragment=myActivity.getFragmentManager().findFragmentByTag(myTag);
//检查片段是否已初始化
if(myFragment==null){
//如果不是,则实例化并将其添加到活动中
myFragment=Fragment.instantiate(myActivity,myClass.getName());
ft.add(R.id.fragment0,myFragment,myTag);
}否则{
//如果存在,只需将其附加以显示即可
ft.attach(myFragment);
}
}
@凌驾
已选择公共空页(选项卡,碎片事务ft){
Fragment myFragment=myActivity.getFragmentManager().findFragmentByTag(myTag);
if(myFragment!=null){
//拆下碎片,因为正在连接另一个碎片
ft.detach(myFragment);
}
}
@凌驾
已重新选择公共无效页签(页签,碎片事务){
//TODO自动生成的方法存根
}
}
有一个片段:

public class Web extends Fragment implements OnLongClickListener, OnClickListener{


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    c=this.getActivity();

    v = inflater.inflate(R.layout.activity_main, container, false);
    return v;
}

@SuppressWarnings("deprecation")
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
setRetainInstance(true);


wv = (WebView)v.findViewById(R.id.wv);
wv.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onProgressChanged(WebView view, int progress) {
        // TODO Auto-generated method stub
        super.onProgressChanged(view, progress);

               if(progress < 100 && pr.getVisibility() == ProgressBar.GONE){
                   pr.setVisibility(ProgressBar.VISIBLE);

               }
               pr.setProgress(progress);
               if(progress == 100) {
                   pr.setVisibility(ProgressBar.GONE);

               }
            }
});
wv.setWebViewClient(new MyWebViewClient());











wv.loadUrl("http://www.google.com");
wv.setOnLongClickListener(this);}
公共类Web扩展片段实现OnLongClickListener、OnClickListener{
@凌驾
创建时的公共void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//TODO自动生成的方法存根
c=this.getActivity();
v=充气机。充气(R.布局.活动\主容器,假);
返回v;
}
@抑制警告(“弃用”)
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onActivityCreated(savedInstanceState);
setRetainInstance(真);
wv=(WebView)v.findviewbyd(R.id.wv);
wv.setWebChromeClient(新WebChromeClient(){
@凌驾
public void onProgressChanged(WebView视图,int-progress){
//TODO自动生成的方法存根
super.onProgressChanged(视图、进度);
if(progress<100&&pr.getVisibility()==ProgressBar.GONE){
pr.setVisibility(ProgressBar.VISIBLE);
}
pr.setProgress(进度);
如果(进度==100){
pr.setVisibility(ProgressBar.GONE);
}
}
});
setWebViewClient(新的MyWebViewClient());
wv.loadUrl(“http://www.google.com");
wv.setOnLongClickListener(this);}
试试看

另外,请查看以下帖子:

我在onActivityCreated中设置了RetainInstance(true),但仍然存在同样的问题,即activity recreate。“这只能用于不在后堆栈中的片段”-您考虑过吗?我的片段不在后堆栈中。但您写了“activity recreate”-它确实存在,然后就不会创建片段了。您确定以正确的方式检查它吗?