2016-05-23 11 views
0

私は4つのタブを含むダッシュボードを持っています。A、B、C、Dと言うことができます。それぞれのフラグメントにはもう1つの子フラグメントがあります。 - (a、b)、C - (a、b)、およびD - (a、b)である。私がアプリケーションを起動すると、すべてのフラグメントがロードされます。フラグメントBをクリックすると、フラグメントAからフラグメントBにデータが渡されます。タブAをクリックしてタブBをクリックした場合にのみ、ページがロードされます。ここでフラグメントが別のフラグメントの中にロードされていない

public class Dashboard extends AppCompatActivity { 
    private Toolbar toolbar; 
    private TabLayout tabLayout,tablayout_top; 
    private ViewPager viewPager; 
    public List<Task_data> tasklist = new ArrayList<>(); 
    private TaskFragmentAdapter tadapter; 
    private final Task_main_fragment mfragment0; 

    public Dashboard() { 
     mfragment0 = null; 
    } 

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


     toolbar = (Toolbar) findViewById(R.id.toolbar_home_dashboard); 
     setSupportActionBar(toolbar); 

     viewPager = (ViewPager) findViewById(R.id.viewpager_home_dashboard); 
     setupViewPager(viewPager); 

     final int PAGE = 0; 

     viewPager.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       if (viewPager.getCurrentItem() == PAGE) { 
        viewPager.setCurrentItem(PAGE - 1, false); 
        viewPager.setCurrentItem(PAGE, false); 
        return true;  
       } 
       return false; 
      } 
     }); 

     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 
       if (position == 2) { 
        //do your Staff 
        Toast.makeText(Dashboard.this, "You are currently working on snags page", Toast.LENGTH_SHORT).show(); 
        //now I need to refresh the fragments in onpage selected page. 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

/*  viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(final int i, final float v, final int i2) { 
      } 
      @Override 
      public void onPageSelected(final int i) { 
       YourFragmentInterface fragment = (YourFragmentInterface) mPagerAdapter.instantiateItem(mViewPager, i); 
       if (fragment != null) {Toast.makeText(Dashboard.this, "you are on task page", Toast.LENGTH_SHORT).show(); 
        fragment.fragmentBecameVisible(); 
       } 
      } 
      @Override 
      public void onPageScrollStateChanged(final int i) { 
      } 
     });*/ 

     tabLayout = (TabLayout) findViewById(R.id.tabs_home_dashboard); 
     tabLayout.setupWithViewPager(viewPager); 

     /* for(int i=0;i<tabLayout.getTabCount();i++){ 

      TabLayout.Tab tab =tabLayout.getTabAt(i); 
      RelativeLayout relativeLayout=(RelativeLayout)LayoutInflater.from(this).inflate(R.layout.tab_layout,tabLayout,false); 
      tab.setCustomView(relativeLayout); 
      tab.select(); 

     }*/ 
     setupTabIcons(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_dashboard,menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.Refresh_dashboard: 

       Toast.makeText(getApplicationContext(), "The page is about to get refresh", Toast.LENGTH_SHORT).show(); 
       //getRefresh(); Iam calling a m 

       break; 
      case R.id.Account: 

       startActivity(new Intent(getApplicationContext(), Profile.class)); 


       return true; 
      case R.id.Homepage_dashboard: 

       startActivity(new Intent(getApplicationContext(),homepage.class)); 
       return true; 

      case R.id.sync_dashboard: 

       startActivity(new Intent(getApplicationContext(),sync.class)); 
       return true; 

     } 
     return super.onOptionsItemSelected(item); 
    } 

    private void setupTabIcons() { 
     TextView tabOne = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabOne.setText("Home"); 
     tabOne.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schld, 0, 0); 
     tabLayout.getTabAt(0).setCustomView(tabOne); 

     TextView tabTwo = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabTwo.setText("Schedule"); 
     tabTwo.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schld, 0, 0); 
     tabLayout.getTabAt(1).setCustomView(tabTwo); 

     TextView tabThree = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabThree.setText("Tasks"); 
     tabThree.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.taskimg, 0, 0); 
     tabLayout.getTabAt(2).setCustomView(tabThree); 

     TextView tabfour = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabfour.setText("Drafts"); 
     tabfour.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.cloud, 0, 0); 
     tabLayout.getTabAt(3).setCustomView(tabfour); 

     /* TextView tabfive = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabfive.setText("Sync"); 
     tabfive.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.cloud, 0, 0); 
     tabLayout.getTabAt(4).setCustomView(tabfive);*/ 

     /* TextView tabfive = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabfive.setText("More"); 
     tabfive.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_action_help, 0, 0); 
     tabLayout.getTabAt(4).setCustomView(tabfive);*/ 
    } 

    /** 
    * Adding fragments to ViewPager 
    * @param viewPager 
    */ 
    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new A(),"ONE"); 
     adapter.addFrag(new B(),"TWO"); 
     adapter.addFrag(new C(), "THREE"); 
     adapter.addFrag(new D(), "FOUR"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentStatePagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 

      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

は私のフラグメントは

public class B extends Fragment { 
    private TabLayout tabLayout,tablayout_top; 
    private ViewPager viewPager; 
    View view; 
    private int[] tabIcons = { 
      R.drawable.ic_tab_favourite, 
      R.drawable.ic_tab_call, 
      R.drawable.ic_tab_contacts 
    }; 
    /* @Bind(R.id.title) TextView name; 
    @Bind(R.id.job_title) TextView jobTitle;*/ 
    public Schedule_Fragment(){ 

    } 

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

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.activity_schedule__fragment,container, false); 
     super.onCreate(savedInstanceState); 

     ButterKnife.inject(this, view); 
     viewPager =ButterKnife.findById(view,R.id.viewPager_top_schedule); 
     setupViewPager(viewPager); 
     TabLayout tabLayout = ButterKnife.findById(view,R.id.tabs_top_home_schedule); 
     tabLayout.setupWithViewPager(viewPager); 
     /* setupTabicons();*/ 

     return view; 
    } 

    private void setupTabicons() { 
     TextView tabOne = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.custom_tab, null); 
     tabOne.setText("Snags"); 
     tabOne.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_favourite, 0, 0); 
     tabLayout.getTabAt(0).setCustomView(tabOne); 

     TextView tabTwo = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.custom_tab, null); 
     tabTwo.setText("Desnags"); 
     tabTwo.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_call, 0, 0); 
     tabLayout.getTabAt(1).setCustomView(tabTwo); 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
     ButterKnife.reset(this); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapterTop adaptertop = new ViewPagerAdapterTop(getChildFragmentManager()); 
     adaptertop.addFragment(new a(),"Snags"); 
     adaptertop.addFragment(new b(),"Desnags"); 
     viewPager.setAdapter(adaptertop); 
    } 

    class ViewPagerAdapterTop extends FragmentPagerAdapter{ 
     private final List<Fragment> mFragments = new ArrayList<>(); 
     private final List<String> mFragmentTitles = new ArrayList<>(); 

     public ViewPagerAdapterTop(FragmentManager fm) { 
      super(fm); 
     } 
     public void addFragment(Fragment fragment, String title) { 
      mFragments.add(fragment); 
      mFragmentTitles.add(title); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragments.get(position 
     } 

     @Override 
     public int getCount() { 
      return mFragments.size(); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitles.get(position); 
     } 
    } 
} 

は今、この二つの断片が、bは私がフラグメントB.をクリックした場合にのみ、フラグメントBがロードされてロードされていないB、別の二つの断片が含まれたコードです私がフラグメントAをクリックしてフラグメントBに戻ったとき、私がAndroidに慣れていないと私を助けてください。

+0

なぜあなたのフラグメントにスタックを維持していませんか? –

答えて

0

アクティビティ内では複数のフラグメントを持つことができますが、フラグメント内でフラグメント化することはできません。同じことの詳細については、フラグメントのライフサイクルを確認してくださいFragment lifecycle

関連する問題