1

i have tried multiple times to add two fragments into One Action Tab.when i press the action tab "Search" i want to load one fragment when i swipe it will go to 2nd fragment under the Action tab.please find below the code i Used.

MainActivity.java

package com.example.swipetabs;
import com.tabs.*;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.widget.ImageView;
import com.comparenow.*;

public class MainActivity extends FragmentActivity implements TabListener {

    ActionBar action_bar;
    ViewPager viewPager;
    ImageView creditCards;
    Fragment fragement;
    Fragment fragement1;
    Fragment fragement2;


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

        viewPager=(ViewPager)findViewById(R.id.pager);


        viewPager.setAdapter(new MyAdoptor(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                action_bar.setSelectedNavigationItem(arg0);

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });

        action_bar=getActionBar();
        //action_bar.setBackgroundDrawable(d)
        action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tab1=action_bar.newTab();
        tab1.setText("Login");

        tab1.setTabListener(this);

        ActionBar.Tab tab2=action_bar.newTab();
        tab2.setText("Compare Now");
        tab2.setTabListener(this);

        ActionBar.Tab tab3=action_bar.newTab();
        tab3.setText("Search");
        tab3.setTabListener(this);

        action_bar.addTab(tab1);
        action_bar.addTab(tab2);
        action_bar.addTab(tab3);

    }

    public void switchToFragmentB(){
        viewPager.setCurrentItem(4);
     }

    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub


    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        //this is the code
        viewPager.setCurrentItem(tab.getPosition());

        String name=(String)tab.getText().toString();

         // compare it to the tab you  would like to do something with        
        if (name == "Search") {
            //load the 1st fragment
            fragement1= new CreditCards();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.store_fragment_container, fragment).commit();

            //load the 2nd fragment
            fragement2 = new Loginfrag();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.imageView1,fragement2).commit();

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }


}


class MyAdoptor extends FragmentPagerAdapter
{

    public MyAdoptor(FragmentManager fm) {
        super(fm);
                // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub

        Fragment fragement=null;
        if(arg0==0)
        {
            fragement=new Loginfrag();
        }
        if(arg0==1)
        {
            fragement=new Comparefrag();
        }
        if(arg0==2)
        {
            fragement=new Searchfrag();
        }



        System.out.print("<><><><>");
        return fragement;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3;
    }

}

CreditCards.java (Fragment) /Loginfrag .java (Fragement ) both are same its's got corresponsing xml files as well.

package com.comparenow;

import com.example.swipetabs.R;
import com.example.swipetabs.R.layout;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class CreditCards extends Fragment {

    public CreditCards() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.creditcards_c, container, false);
    }

i have problem with below code segment,im not sure Its parameters.

fragement1= new CreditCards();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.store_fragment_container, fragment).commit();

            //load the 2nd fragment
            fragement2 = new Loginfrag();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.imageView1,fragement2).commit();

    }
VenushkaT
  • 1,152
  • 2
  • 19
  • 42
  • I think u need to call next fragment after first 1st finish animation so need to add animation listener - see this link - http://stackoverflow.com/questions/11120372/performing-action-after-fragment-transaction-animation-is-finished – Neha Feb 06 '14 at 06:12
  • @Neha im only concern about changing fragements under one action Tab – VenushkaT Feb 06 '14 at 06:16
  • And if you do change multiple fragments under one action tab what issue u facing ? – Neha Feb 06 '14 at 06:37
  • @Neha i have posted the code segment which i'm getting Errors.thanks for let me know. – VenushkaT Feb 06 '14 at 06:52
  • where u initializing fragment .. in code i can see fragement1 and fragement2 ..where is fragment ? – Neha Feb 06 '14 at 07:18
  • @Neha i have initialized those in my MainActivity.java please find below the code o used – VenushkaT Feb 06 '14 at 07:44
  • Are you getting this error - "The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment)" – Neha Feb 06 '14 at 08:13

1 Answers1

1

In general, I believe what you're looking for is to create a ViewPager within a Fragment within a ViewPager.

Your MainActivity is more or less right, but you should forget everything below viewPager.setCurrentItem(tab.getPosition()) in onTabSelected(). Instead of using Searchfrag in your pager adapter's getItem() method, you're going to need to create and use a parent Fragment for both Searchfrag and whatever other Fragment you want to scroll to in the Search tab. This Fragment can be really simple and contain only a ViewPager and pager adapter. In this parent Fragment's pager adapter, you'll write the getItem() method to return Searchfrag for item 0 and whatever other fragment you want to scroll to for item 1. Both of these Fragment's will look like they are under your Search tab.

For example, the FragmentPagerAdapter that will hold Searchfrag and the other Fragment should have a getItem() method like the following:

public static class SampleFragmentAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int arg0) {
        if(arg0 == 0){
            return new Searchfrag();
        } else {
            return new OtherFragmentUnderSearchTab();
        }

    }

    @Override
    public int getCount() {
        return 2;
    }

}

This parent Fragment (let's call it ParentFragment) should replace Searchfrag in the getItem() method of MyAdoptor like so:

@Override
public Fragment getItem(int arg0) {
    // TODO Auto-generated method stub

    Fragment fragement=null;
    if(arg0==0)
    {
        fragement=new Loginfrag();
    }
    if(arg0==1)
    {
        fragement=new Comparefrag();
    }
    if(arg0==2)
    {
        fragement=new ParentFragment();
    }



    System.out.print("<><><><>");
    return fragement;

}
Justin Pollard
  • 6,661
  • 1
  • 18
  • 20