【问题标题】:Sending a string from FragmentActivity to Fragment through FragmentPagerAdaptor通过 FragmentPagerAdaptor 将字符串从 FragmentActivity 发送到 Fragment
【发布时间】:2014-11-24 13:40:20
【问题描述】:

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

Access to getString() in a fragment that implements a viewpager 和 How 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;
    }
}

谢谢

【问题讨论】:

    标签: android android-fragments android-fragmentactivity


    【解决方案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;
        }
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      在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;
      }
      }
      

      【讨论】:

      • 谢谢,.. 能够解决我的问题.. :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多