2016-06-02 21 views
1

Ich habe Hauptaktivität, die wichtige Parameter enthält, die ich an alle Anwendungsaktivitäten übergeben muss. (Benutzername - Benutzerberechtigung - Team .. ETC).Übergabe von Parametern von Aktivität an eine andere Aktivität Fragmenten

Ich weiß, wie man das macht, außer in einer Aktivität, die drei Fragmente enthält, die mit Pager und tablayout angezeigt werden. Wie kann ich die Parameter an alle diese Fragmente übergeben? .. sollte ich es der Aktivität übergeben und es dann als zweiten Schritt an die drei Fragmente weitergeben? wenn ja, wie kann ich pass an die Fragmente in dem folgenden Code:

Zweite Aktivität Java:

public class DCODatabase extends AppCompatActivity { 

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.DCODatabaseToolbar); 
    setSupportActionBar(toolbar); 
    assert toolbar != null; 
    toolbar.setLogo(R.drawable.dco1); 

    //Receving bundle from main activity// --> Working 
    Bundle extras = getIntent().getExtras(); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab); 
    assert tabLayout != null; 
    tabLayout.addTab(tabLayout.newTab().setText("General Reports")); 
    tabLayout.addTab(tabLayout.newTab().setText("Report Display")); 
    tabLayout.addTab(tabLayout.newTab().setText("New Report")); 

    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    final PagerAdapter adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount(),extras); 
    assert viewPager != null; 
    viewPager.setAdapter(adapter); 

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
     } 
     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 
} 
} 

Pager-Adapter:

public class PagerAdapter extends FragmentStatePagerAdapter{ 
int mNumOfTabs; 
private final Bundle fragmentBundle; 
public PagerAdapter(FragmentManager fm, int mNumOfTabs, Bundle bundle) { 
    super(fm); 
    this.mNumOfTabs = mNumOfTabs; 
    this.fragmentBundle = bundle; ---> Receving in Adapter. 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      DCOGeneralReports tab1 = new DCOGeneralReports(); 
      tab1.setArguments(fragmentBundle); --> Sending to fragement 
      return tab1; 
     case 1: 
      DCOReportDisplay tab2 = new DCOReportDisplay(); 
      return tab2; 
     case 2: 
      DCO_New_Report tab3 = new DCO_New_Report(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

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

Fragment Beispiel:

public class DCOGeneralReports extends Fragment { 

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

// here the problem. (SavedInstance is null! --> Not Receving the data) 
Name = savedInstanceState.getString("Name"); 
     UserGroup = savedInstanceState.getString("UserGroup"); 
     Team = savedInstanceState.getString("Team"); 

Antwort

1

Innerhalb der Aktivitätsklasse können Sie beim Erstellen einer Instanz des Adapters das Argument übergeben, sodass Sie diesen Wert in a zurückholen können Dapters Konstrukteur. Innen getItem() -Methode von PagerAdapter versuchen diese

Bundle =new Bundle(); 
    b.putString("key","value"); 
    tab1.setArgument(b); 
    return tab1; 

Und es besteht auch keine Notwendigkeit für jede Aktivität Argument übergeben, bis Sie es in final activity.you benötigen, können sie schreiben, indem Sie getIntent.putExtra(), so dass später kann es durch die Verwendung der getExtra („Schlüssel“)

um übergeben sie den Wert schaffen eine intsance wie diese

ArrayList demo=new ArrayList(); 
    demo.add("A"); 
    final PagerAdapter adapter = new PagerAdapter 
     (getSupportFragmentManager(), tabLayout.getTabCount(),demo); 

Und in Adapterklasse ändern sie den Konstruktor

abgerufen werden
ArrayList frag; 
public PagerAdapter(FragmentManager fm, int mNumOfTabs,ArrayList frag) { 
super(fm); 
this.mNumOfTabs = mNumOfTabs; 
this.frag=frag; 
} 
+0

Ich bin verwirrt, wie die Seite Adapter-Klasse wird der übergebene Parameter "Value" in Putter verwendet werden? Wie kann es von der Aktivitätsklasse an die Adapterklasse weitergegeben werden? –

+0

Ich habe Bearbeiten zu meinem answer.try es –

+0

Dank, werde ich versuchen, dies mit der Gruppierung aller meiner Parameter in Bundle und übergeben Sie es durch Aktivität zu Adapter zu Fragmenten. Ich werde Ihnen das Ergebnis bald wissen lassen –

Verwandte Themen