2013-02-21 89 views
0

我想要分離/附加我的片段,但如何設置,片段不會在創建後重新創建。OnDetach/onAttach片段重新創建片段活動

在片段我有WebView;當我選擇和取消選擇標籤時,webview加載首頁。

有我的代碼:

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 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);} 

回答

1
+0

我在setActivityCreated中setRetainInstance(true),但仍然是同樣的問題,活動重新創建。 – Nass 2013-02-21 09:13:55

+0

「這隻能用於不在後端堆棧中的碎片」 - 你是否考慮過這個? – ania 2013-02-21 09:20:49

+0

我有片段不在回棧中。 – Nass 2013-02-21 09:22:12