2016-03-29 11 views
2

Ich recherchierte viel und fand keine Lösung für meinen Fall.Daten von Activity mit ViewPager an Fragmente übergeben

Dies ist meine Aktivität:

public class ProfileActivity extends AppCompatActivity { 



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



     setContentView(R.layout.activity_profile); 



     //region FindViews 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
     //endregion 

     //region ViewPager 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     setupViewPager(viewPager); 
     viewPager.setOffscreenPageLimit(5); 
//  tabLayout.setupWithViewPager(viewPager); 
     tabLayout.setViewPager(viewPager); 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       switch (position) { 
        case 0: 
         changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_red_primary)); 
         break; 
        case 1: 
         changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_yellow_primary)); 
         break; 
        case 2: 
         changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_green_primary)); 
         break; 
        case 3: 
         changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_blue_primary)); 
         break; 
        case 4: 
         changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_black_primary)); 
         break; 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
     //endregion 

     extrasForFragment = new Bundle(); 
     extrasForFragment.putInt("name", 3); 

     //region Get Extras from Intent 
     extras = getIntent().getExtras(); 
     if (extras != null) { 
      userID = extras.getInt(StaticVariables.INTENT_USERID, -1); 
      Log.e("ISER", "dd " + userID); 
      OverViewFragment.newInstance().setArguments(extrasForFragment); 
     } 
     //endregion 

     setTitle(""); 
    } 

class ViewPagerAdapter extends FragmentPagerAdapter { 
     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); 
     } 
    } 





private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(OverViewFragment.newInstance(), getString(R.string.overview)); 
     adapter.addFrag(new Fragment2(), getString(R.string.text)); 
     adapter.addFrag(new Fragment3(), getString(R.string.text)); 
     adapter.addFrag(new Fragment4(), getString(R.string.text)); 
     adapter.addFrag(new Fragment5(), getString(R.string.text)); 
     viewPager.setAdapter(adapter); 
    } 
} 

Aber es wird nicht funktionieren .. Das ist mein Fragment:

public class OverViewFragment extends Fragment { 
public static OverViewFragment newInstance() { 
     return new OverViewFragment(); 
    } 
@Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     Bundle b = getArguments(); 
     if (b != null) { 
      Log.e("EXTRAS", "sind: " + b.toString() + " und: " + b.getInt("name", 0)); 
     } else { 
      Log.e("FAIL", "..."); 
     } 
     return inflater.inflate(R.layout.fragment_recyclerview, container, false); 
    } 
} 

Aber es funktioniert nicht. Ich habe das versucht: Send data from activity to fragment in android und das: Passing value between activity to fragment on android Aber nichts will arbeiten .. Ich hoffe auf Lösungen. Danke für jede Hilfe!

+0

Wo ist die ChangeColor() -Methode definiert? – Egor

+0

Macht nichts? Es ändert nur die Farbe der Registerkarten – blueman3399

Antwort

5

Der einzige Ort, den Sie setArguments nennen, ist an der Linie OverViewFragment.newInstance().setArguments(extrasForFragment);, die nicht in Ihrem ViewPager verwendet wird. Sie möchten die Argumente in Ihrer setupViewPager Methode so festlegen:

+0

danke! Das ist schön! – blueman3399

Verwandte Themen