
tab1 – >在1 – > insIDe2
tab2 – >里面3 – >里面4
tab3 – >里面5
我的意思是它应该打开一个新的布局和类.
我的项目主要是这样的:
public class TabsFragmentActivity extends SherlockFragmentActivity implements TabHost.OnTabchangelistener { private TabHost mTabHost; private HashMap<String,TabInfo> mapTabInfo = new HashMap<String,TabInfo>(); private TabInfo mLastTab = null; private static Context mContext; private class TabInfo { private String tag; private Class clss; private Bundle args; private Fragment fragment; TabInfo(String tag,Class clazz,Bundle args) { this.tag = tag; this.clss = clazz; this.args = args; } } class TabFactory implements TabContentFactory { private final Context mContext; public TabFactory(Context context) { mContext = context; } public VIEw createTabContent(String tag) { VIEw v = new VIEw(mContext); v.setMinimumWIDth(0); v.setMinimumHeight(0); return v; } } protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Step 1: Inflate layout setContentVIEw(R.layout.tabs_fragment_activity); mContext = this; // Step 2: Setup TabHost initialiseTabHost(savedInstanceState); if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); } addNavaigationbar(); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { //Add Action item with Title menu.add("some") .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); return super.onCreateOptionsMenu(menu); } public voID addNavaigationbar() { // Create Action bar sherlock Actionbar navigation_bar = getSupportActionbar(); // Setting standart navigation bar vIEw navigation_bar.setNavigationMode(Actionbar.NAVIGATION_MODE_STANDARD); navigation_bar.setdisplayShowTitleEnabled(true); navigation_bar.setTitle("Test"); // OverrIDe Action items to navigation bar. Calls onCreateOptionsMenu // invalIDateOptionsMenu(); } protected voID onSaveInstanceState(Bundle outState) { outState.putString("tab",mTabHost.getCurrentTabTag()); // save the tab // selected super.onSaveInstanceState(outState); } /** * Step 2: Setup TabHost */ private voID initialiseTabHost(Bundle args) { mTabHost = (TabHost) findVIEwByID(androID.R.ID.tabhost); mTabHost.setup(); TabInfo tabInfo = null; TabsFragmentActivity.addTab(this,this.mTabHost,this.mTabHost .newTabSpec("Tab1").setIndicator("Tab 1"),(tabInfo = new TabInfo("Tab1",Tab1Fragment.class,args))); this.mapTabInfo.put(tabInfo.tag,tabInfo); TabsFragmentActivity.addTab(this,this.mTabHost .newTabSpec("Tab2").setIndicator("Tab 2"),(tabInfo = new TabInfo("Tab2",Tab2Fragment.class,tabInfo); TabsFragmentActivity.addTab(this,this.mTabHost .newTabSpec("Tab3").setIndicator("Tab 3"),(tabInfo = new TabInfo("Tab3",Tab3Fragment.class,tabInfo); // Default to first tab this.onTabChanged("Tab1"); // mTabHost.setonTabChangedListener(this); } private static voID addTab(TabsFragmentActivity activity,TabHost tabHost,TabHost.TabSpec tabSpec,TabInfo tabInfo) { // Attach a Tab vIEw factory to the spec tabSpec.setContent(activity.new TabFactory(activity)); String tag = tabSpec.getTag(); //getTabWidget() VIEw vIEw = prepareTabVIEw(activity,R.ID.tab_bar_icon); tabSpec.setIndicator(vIEw); // Check to see if we already have a fragment for this tab,probably // from a prevIoUsly saved state. If so,deactivate it,because our // initial state is that a tab isn't shown. tabInfo.fragment = activity.getSupportFragmentManager().findFragmentByTag(tag); if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) { FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); ft.detach(tabInfo.fragment); ft.commit(); activity.getSupportFragmentManager().executePendingTransactions(); } tabHost.addTab(tabSpec); } private static VIEw prepareTabVIEw(Context context,int drawable){ //inflate(R.layout.tab_indicator,androID.R.ID.tabs,false) VIEw tabIndicator = LayoutInflater.from(context).inflate(R.layout.tab_indicator,null); ImageVIEw icon = (ImageVIEw) tabIndicator.findVIEwByID(R.ID.tab_bar_icon); icon.setimageResource(R.drawable.ic_launcher); return tabIndicator; } public voID onTabChanged(String tag) { TabInfo newTab = this.mapTabInfo.get(tag); if (mLastTab != newTab) { FragmentTransaction ft = this.getSupportFragmentManager() .beginTransaction(); if (mLastTab != null) { if (mLastTab.fragment != null) { ft.detach(mLastTab.fragment); } } if (newTab != null) { if (newTab.fragment == null) { newTab.fragment = Fragment.instantiate(this,newTab.clss.getname(),newTab.args); ft.add(R.ID.realtabcontent,newTab.fragment,newTab.tag); } else { ft.attach(newTab.fragment); } } mLastTab = newTab; ft.commit(); this.getSupportFragmentManager().executePendingTransactions(); } }} 这会创建3个标签与内容.这里是如何看Tab1片段类(其他看起来相似):
public class Tab1Fragment extends SherlockFragment { public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { if (container == null) { // We have different layouts,and in one of them this // fragment's containing frame doesn't exist. The fragment // may still be created from its saved state,but there is // no reason to try to create its vIEw hIErarchy because it // won't be displayed. Note this is not needed -- we Could // just run the code below,where we would create and return // the vIEw hIErarchy; it would just never be used. return null; } linearLayout theLayout = (linearLayout)inflater.inflate(R.layout.tab_frag1_layout,container,false); // Register for the button.OnClick event button b = (button)theLayout.findVIEwByID(R.ID.frag1_button); b.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) {**//Here i want open a new window but don't change pressed tab and when press back it should go back at this window** } }); return theLayout; }} 我按下按钮,按我想要的.
我不能在这个片段中打开一个新的片段或活动?
我应该怎么做导航片段?
解决方法 我喜欢让我的主机Activity处理所有的转换,所以我在我的片段中做的是创建一个接口来处理导航.例如,您可以将此界面添加到Tab1Fragment中:public interface Callback { public voID onbuttonBClicked();} 然后在TabsFragmentActivity中,实现Tab1Fragment.Callback,这将需要您实现onbuttonBClicked().以下是您如何实现此方法的示例:
@OverrIDepublic voID onbuttonBClicked() { Fragment anotherFragment = Fragment.instantiate(this,AnotherFragment.class.getname()); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(R.ID.realtabcontent,anotherFragment); ft.addToBackStack(null); ft.commit();} 几乎完成了接下来,您需要做的是在片段中获取对此回调的引用.这通常在onAttached()方法中实现.例如:
@OverrIDepublic voID onAttach(Activity activity) { super.onAttach(activity); try { mCallback = (Callback) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + Callback.class.getname()); }} 最后,在你的OnClickListener中,调用mCallback.onbuttonBClicked().
总结以上是内存溢出为你收集整理的android – 如何在片段中导航?全部内容,希望文章能够帮你解决android – 如何在片段中导航?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)