通过FragmentPagerAdaptor将FragmentActivity中的字符串发送到Fragment

时间:2014-11-24 05:21:36

标签: android android-fragments android-fragmentactivity

我有一个包含字符串的fragmentactivity。我想将该字符串传递给另一个片段。我怎样才能做到这一点。我在这里找到了一些链接,

Access to getString() in a fragment that implements a viewpagerHow do I pass a variable through a FragmentPagerAdapter to a Fragment?

但不知何故,我真的没有得到那里正在做的事情。任何人都可以指出在我的案件中要做什么吗?

粘贴以下代码:

片段活动

   public class AdaptorMain extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdaptor mAdaptor;
    private ActionBar actionBar;
    private String vehicleNumber;



    public String getVehicleNumber() {
        return vehicleNumber;
    }
    public void setVehicleNumber(String vehicleNumber) {
        this.vehicleNumber = vehicleNumber;
    }

    private String[] tabs = {"Vehicle Asset", "Human Asset", "Base Info"};

    @Override
    public void onCreate(Bundle savedInstanceState){
        Log.w("in adaptor","in adaptor activity");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.adaptor_main);
        Intent intent = getIntent();
        vehicleNumber = intent.getExtras().getString("KEY");
        Log.w("vehicle received is", "Number" + vehicleNumber);


        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdaptor = new TabsPagerAdaptor(getSupportFragmentManager());

        viewPager.setAdapter(mAdaptor);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        for(String tab_name : tabs){
            actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
        }

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // TODO Auto-generated method stub
                actionBar.setSelectedNavigationItem(position);
            }

            @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

            }
        });

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

    }

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

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

    }
}

FragmentPagerAdaptor:

public class TabsPagerAdaptor extends FragmentPagerAdapter {

    public TabsPagerAdaptor(FragmentManager fragmentManager) {
        super(fragmentManager);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int index) {
        // TODO Auto-generated method stub
        switch(index){
        case 0 :
            return new VehicleAssetTab();
        case 1:
            return new HumanAssetTab();
        case 2: 
            return new BaseInfoTab();
        }
        return null;
    }

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

片段

public class VehicleAssetTab extends Fragment{  
    String vehicleNumber;   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.vehicle_asset_tab, container, false);

        TextView tv1 = (TextView) rootView.findViewById(R.id.textView2);       
        //Log.w("vehicle number in tab", "number: " + vehicleNumber);
        //tv1.setText(obj.vehicleNumber);        
        return rootView;
    }
}

谢谢

2 个答案:

答案 0 :(得分:1)

尝试这样,

片段活动

mAdaptor = new TabsPagerAdaptor(getSupportFragmentManager(),vehicleNumber);

<强>&安培;在FragmentPagerAdaptor中,

String mvehicleNumber;

 public TabsPagerAdaptor(FragmentManager fragmentManager,String vehicleNumber) {
        super(fragmentManager);
        this.mvehicleNumber = vehicleNumber;
    }

@Override
    public Fragment getItem(int index) {
        // TODO Auto-generated method stub
        switch(index){
        case 0 :
            return new VehicleAssetTab(mvehicleNumber);
        }
        return null;
    }
片段

String mvehicleNumber;

 public VehicleAssetTab(String vehicleNumber) {
       this.mvehicleNumber = vehicleNumber;
    }

希望它会帮助你

答案 1 :(得分:1)

在FragmentActivity 中更改此行

mAdaptor = new TabsPagerAdaptor(getSupportFragmentManager(),vehicleNumber );

FragmentPagerAdapter

public class TabsPagerAdaptor extends FragmentPagerAdapter {
String vehicleNumber;
public TabsPagerAdaptor(FragmentManager fragmentManager,String vehicleNumber) {
    super(fragmentManager);
    this.vehicleNumber = vehicleNumber;
    // TODO Auto-generated constructor stub
}

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

    Bundle args = new Bundle();
    args.putString("vehicleNumber", vehicleNumber);


    switch(index){
    case 0 :
        VehicleAssetTab vehicle = VehicleAssetTab();
        vehicle.setArguments(args);
        return vehicle ;

    case 1:
        HumanAssetTab human = HumanAssetTab();
        human.setArguments(args);
        return human ;

    case 2: 
        BaseInfoTab base= BaseInfoTab();
        base.setArguments(args);
        return base;
    }
    return null;
}

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

}

片段

public class VehicleAssetTab extends Fragment{  
String vehicleNumber;   
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    vehicleNumber = getArguments().getString("vehicleNumber ", "defaultString");
    View rootView = inflater.inflate(R.layout.vehicle_asset_tab, container, false);

    TextView tv1 = (TextView) rootView.findViewById(R.id.textView2);       
    Log.w("vehicle number in tab", "number: " + vehicleNumber);
    tv1.setText(vehicleNumber);        
    return rootView;
}
}