android – 如何在片段中导航?

android – 如何在片段中导航?,第1张

概述所以我使用Tabs并寻求这种导航: tab1 – >在1 – > inside2 tab2 – >里面3 – >里面4 tab3 – >里面5 我的意思是它应该打开一个新的布局和类. 我的项目主要是这样的: public class TabsFragmentActivity extends SherlockFragmentActivity implements TabHost.On 所以我使用Tabs并寻求这种导航:

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 – 如何在片段中导航?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1131345.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存