2016-01-18 12 views
9

I, m utilizzando slidingTabLayout con 4 schede e un viewpager e una classe di 4 frammenti per ogni scheda.Come posso impostare un tag per i frammenti di viewpager?

ho bisogno di ricaricare uno dei miei frammenti (prima scheda) nel mio progetto quando l'utente clicca un certo tasto, e per questo ho bisogno di avere un tag per quel frammento

la mia domanda è: come posso impostare un tag per uno dei frammenti di viewpagers ???

miei MainActivity tab e viewpager codici:

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 



Toolbar toolbar; 
ViewPager pager; 
ViewPagerAdapter adapter; 
SlidingTabLayout tabs; 
CharSequence Titles[]={"نوع","قیمت","برند","همه"}; 
int Numboftabs = 4; 




@Override 
protected void attachBaseContext(Context newBase) { 
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 




    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "درج آگهی رایگان", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 



    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 




    // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
    adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs); 

    // Assigning ViewPager View and setting the adapter 
    pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    // Assiging the Sliding Tab Layout View 
    tabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width 

    // Setting Custom Color for the Scroll bar indicator of the Tab View 
    tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.colorWhite); 
     } 
    }); 

    // Setting the ViewPager For the SlidingTabsLayout 
    tabs.setViewPager(pager); 
    pager.setCurrentItem(3); 




} and .... 

Grazie molto

+0

se si desidera utilizzare frammenti già viewpager, è possibile utilizzare il metodo getItem (posizione) della scheda. e per i tag, penso che dovresti passare i tag in Constructor of Adapter e quindi impostare su ogni frammento. –

+0

grazie amico mio, ma mi puoi spiegare di più sul passaggio dei tag all'adattatore? grazie –

risposta

15

Ci sono un paio di soluzione per questo.

1). Quando lo FragmentPagerAdapter aggiunge uno Fragment allo FragmentManager, utilizza un tag speciale in base alla posizione particolare in cui verrà inserito lo Fragment. Così si può ottenere semplicemente la corrente visibile Fragment nel vostro ViewPager con queste righe di codice

Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + ViewPager.getCurrentItem()); 
// based on the current position you can then cast the page to the correct Fragment class and call some method inside that fragment to reload the data: 
if (0 == ViewPager.getCurrentItem() && null != fragment) { 
     ((TabFragment1)fragment).reloadFragmentData();  
} 

2). È necessario tenere traccia di tutti i frammenti attivi nello FragmentStatePagerAdapter. Per il campione demo è possibile fare riferimento al secondo approccio here

3). Puoi utilizzare EventBus per pubblicare eventi sul tuo Fragment da qualsiasi luogo. Tutto quello che devi fare è registrare il tuo Fragment per quell'evento specifico. Per la documentazione ufficiale di riferimento this

+0

ma ho appena usato ViewPagerAdapter. cosa dovrei fare? –

+0

il ViewPagerAdapter potrebbe estendere FragmentPageAdapter o FragmentStatePagerAdapter. non è vero? –

+0

no, non l'ho mai usato !!!! c'è qualche altro wat per impostare i tag da frammentare? non so perché è così difficile !!! –

0

Ecco il metodo che viene utilizzato da FragmentPagerAdapter per creare nome del tag 's il Fragment:

private static String makeFragmentName(int viewId, long id) { 
    return "android:switcher:" + viewId + ":" + id; 
} 

viewId è l'id del ViewPager.
id è la posizione del frammento all'interno di ViewPager.

Esempio:

String fragmentTag = makeFragmentName(myViewPager.getId(), 2); 
Fragment fragment = getSupportFragmentManager().findFragmentByTag(fragmentTag);