标签在安卓他们的下一个片段执行codeS present [英] Tabs execute the codes present in their next fragments in android

查看:192
本文介绍了标签在安卓他们的下一个片段执行codeS present的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现标签与刷卡使用 ViewPager 4 片段。当我刷卡fragmnets各自的 XML布局显示正确的每个选项卡上的选项,但该片段的code不正确执行。
例如,以下选项卡有各自的片段吧。

TAB0-​​ButtonFragment

 公共类ButtonFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.fragment_button,集装箱,FALSE);
    Log.i(内部,按钮片段);
    返回rootView;
}

TAB1-ImageFragment

 公共类ImageFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.fragment_image,集装箱,FALSE);
    Log.i(内部,图像片段);
    返回rootView;
}

TAB2-TextFragment

 公共类TextFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.fragment_text,集装箱,FALSE);
    Log.i(内部,文字片段);
    返回rootView;
}

TAB3试验
    公共类测试扩展片段{

  @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.temp,集装箱,FALSE);
    Log.i(内部,tessssssssst片段);
    返回rootView;
}

在显示选项卡
我得到TAB0和TAB1同时日志消息。然后滑动和去TAB1后,我得到TAB2日志消息。滑动到TAB2之后我得到日志信息选项卡3和达到标签3时dispalyed没有日志信息。谁能告诉我怎么可以执行相应的codeS为各自的标签?我剩下的codeS情况如下:

 公共类TabsPagerAdapter扩展FragmentPagerAdapter {//更新 -  code格式公共TabsPagerAdapter(FragmentManager FM){
    超(FM);
}@覆盖
公共片段的getItem(INT指数){
    Log.i(索引,+指数);
    开关(指数){
    情况下0:
        //顶级片段活动
        返回新ButtonFragment();
    情况1:
        //游戏片段活动
        返回新ImageFragment();
    案例2:
        //电影片段活动
        返回新TextFragment();
    案例3:
        返回新的测试();
    }    返回null;
}@覆盖
公众诠释的getCount(){
    //获取项目计数 - 等于标签数
    返回4;
}

MainActivity

 公共类MainActivity扩展FragmentActivity实现OnTabChangeListener,OnPageChangeListener {私人TabsPagerAdapter mAdapter;
私人ViewPager mViewPager;
私人TabHost mTab​​Host;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);    mViewPager =(ViewPager)findViewById(R.id.viewpager);    //初始化标签
    initialiseTabHost();
    mAdapter =新TabsPagerAdapter(getSupportFragmentManager());
    //片段和ViewPager初始化
    mViewPager.setAdapter(mAdapter);
    mViewPager.setOnPageChangeListener(MainActivity.this);
}//方法添加TabHost
私有静态无效AddTab(MainActivity活动,TabHost tabHost,TabHost.TabSpec则tabspec){
    tabSpec.setContent(新MyTabFactory(活动));
    tabHost.addTab(则tabspec);
}//管理标签的变化,与网页同步它
公共无效onTabChanged(字符串标签){
    INT POS = this.mTabHost.getCurrentTab();
    this.mViewPager.setCurrentItem(POS)
}@覆盖
公共无效onPageScrollStateChanged(INT为arg0){
}//管理页面的变化,与标签同步它
@覆盖
公共无效onPageScrolled(INT为arg0,ARG1浮球,诠释ARG2){
    INT POS = this.mViewPager.getCurrentItem();
    this.mTabHost.setCurrentTab(POS)
}@覆盖
    公共无效使用onPageSelected(INT为arg0){}
//创建标签
私人无效initialiseTabHost(){
    mTabHost =(TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();    // TODO这里写您的标签
    MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(ButtonTab)setIndicator(ButtonTab)。);
    MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(ImageTab)setIndicator(ImageTab)。);
    MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(TextTab)setIndicator(TextTab)。);
    MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(TestingTab)setIndicator(TestingTab)。);    mTabHost.setOnTabChangedListener(本);
}


解决方案

这是viewpager作为viewpager这样的意见存在产生的碎片,你不能改变它的默认行为,所以用户可以在它们之间滑动,让老查看滑出屏幕,滑动到屏幕上的新观点。你可以写你的code这样的

  @覆盖
    公共无效setUserVisibleHint(布尔isVisibleToUser){
        super.setUserVisibleHint(isVisibleToUser);
        如果(isVisibleToUser){
          Log.i(内部,按钮片段);
        }其他{
           //片段是不可见
        }
    }

所以,当片段可见你的code执行

I am trying to implement Tabs with swipe using ViewPager and 4 Fragments. When I swipe the tabs the respective xml layouts of the fragmnets are displayed correctly on each tab but the code of the fragments are not executed correctly. eg-The following tabs have the respective fragments in it.

Tab0-ButtonFragment

public class ButtonFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_button, container, false);
    Log.i("inside", "button fragment");
    return rootView;
}

Tab1-ImageFragment

public class ImageFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_image, container, false);
    Log.i("inside", "image fragment");
    return rootView;
}

Tab2-TextFragment

    public class TextFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_text, container, false);
    Log.i("inside", "text fragment");
    return rootView;
}

Tab3-Test public class Test extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.temp, container, false);
    Log.i("inside", "tessssssssst fragment");
    return rootView;
}

When the tabs are displayed I get the log message for tab0 and tab1 simultaneously. Then after swiping and going to tab1 i get the log message for tab2. After swiping to tab2 i get log message for tab 3 and when tab 3 is reached no log message is dispalyed. Can anyone tell me how can I execute the respective codes for the respective tabs? My remaining codes are as below:

public class TabsPagerAdapter extends FragmentPagerAdapter { //Update - code formatting

public TabsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem( int index) {
    Log.i("index", "" + index);
    switch (index) {
    case 0:
        // Top Rated fragment activity
        return new ButtonFragment();
    case 1:
        // Games fragment activity
        return new ImageFragment();
    case 2:
        // Movies fragment activity
        return new TextFragment();
    case 3:
        return new Test();
    }

    return null;
}

@Override
public int getCount() {
    // get item count - equal to number of tabs
    return 4;
}

MainActivity

       public class MainActivity extends FragmentActivity implements OnTabChangeListener, OnPageChangeListener {

private TabsPagerAdapter mAdapter;
private ViewPager mViewPager;
private TabHost mTabHost;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mViewPager = (ViewPager) findViewById(R.id.viewpager);

    // Tab Initialization
    initialiseTabHost();
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    // Fragments and ViewPager Initialization


    mViewPager.setAdapter(mAdapter);
    mViewPager.setOnPageChangeListener(MainActivity.this);
}

// Method to add a TabHost
private static void AddTab(MainActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec) {
    tabSpec.setContent(new MyTabFactory(activity));
    tabHost.addTab(tabSpec);
}

// Manages the Tab changes, synchronizing it with Pages
public void onTabChanged(String tag) {
    int pos = this.mTabHost.getCurrentTab();
    this.mViewPager.setCurrentItem(pos);
}

@Override
public void onPageScrollStateChanged(int arg0) {
}

// Manages the Page changes, synchronizing it with Tabs
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
    int pos = this.mViewPager.getCurrentItem();
    this.mTabHost.setCurrentTab(pos);
}

@Override
    public void onPageSelected(int arg0) {

}


// Tabs Creation
private void initialiseTabHost() {
    mTabHost = (TabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup();

    // TODO Put here your Tabs
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("ButtonTab").setIndicator("ButtonTab"));
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("ImageTab").setIndicator("ImageTab"));
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("TextTab").setIndicator("TextTab"));
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("TestingTab").setIndicator("TestingTab"));

    mTabHost.setOnTabChangedListener(this);
}

解决方案

This is default behaviour of viewpager you can not change it as viewpager creates fragments so that the views exist, so the user can swipe between them, so that the old view sliding off the screen and the new view sliding onto the screen. You can write your code like this

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
          Log.i("inside", "button fragment");
        }else{
           // fragment is not visible
        }
    } 

so that when fragment is visible your code execute

这篇关于标签在安卓他们的下一个片段执行codeS present的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆