2016-05-16 7 views
1

Ich habe ein Problem mit Android eine ViewPager Setup mit FragmentPagerAdapter und TabLayoutAndroid: Erkennen einzelnes Fragment viewpager mit Tab

TabLayout funktioniert gut. Der Code in allen Registerkarten wird jedoch gleichzeitig ausgeführt. Ich möchte den Code in der aktuell ausgewählten Registerkarte

Dies ist meine Tätigkeit

package francesco.prisco.siamostudenti.ui; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import java.util.ArrayList; 
import java.util.List; 
import francesco.prisco.siamostudenti.R; 
import francesco.prisco.siamostudenti.ui.fragments.CalendarFragment; 
import francesco.prisco.siamostudenti.ui.fragments.ChatFragment; 
import francesco.prisco.siamostudenti.ui.fragments.EmailFragment; 
import francesco.prisco.siamostudenti.ui.fragments.HomeFragment; 
import francesco.prisco.siamostudenti.ui.fragments.ProfiloFragment; 


public class HomeTabActivity extends AppCompatActivity { 

// private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

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

     //  toolbar = (Toolbar) findViewById(R.id.toolbar); 
     // setSupportActionBar(toolbar); 
     // getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
     setupTabIcons(); 
    } 
    private void setupTabIcons() { 
     int[] tabIcons = { 
      R.drawable.ic_home, 
      R.drawable.ic_calendar, 
      R.drawable.ic_chat, 
      R.drawable.ic_email, 
      R.drawable.ic_profile 
     }; 

     tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
     tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
     tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
     tabLayout.getTabAt(3).setIcon(tabIcons[3]); 
     tabLayout.getTabAt(4).setIcon(tabIcons[4]); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new HomeFragment(), "HOME"); 
     adapter.addFrag(new CalendarFragment(), "CALENDAR"); 
     adapter.addFrag(new ChatFragment(), "CHAT"); 
     adapter.addFrag(new EmailFragment(), "EMAIL"); 
     adapter.addFrag(new ProfiloFragment(), "PROFILO"); 
     viewPager.setAdapter(adapter); 
    } 
    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 null to display only the icon 
      return null; 
     } 
    } 
} 

Und das ist der Code eines Fragments

package francesco.prisco.siamostudenti.ui.fragments; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import francesco.prisco.siamostudenti.R; 
import francesco.prisco.siamostudenti.ui.HomeTabActivity; 

public class ProfiloFragment extends Fragment { 
    public ProfiloFragment() {} 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_profilo, container, false); 
     return rootView; 
    } 

}  

Helfen Sie mir bitte

+0

Schwer zu sagen, was Sie fragen, aber dies könnte helfen: http: // st ackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager –

Antwort

0

Eigentlich laufen, schauen Pager funktioniert so. Das Hauptziel des View-Pagers ist es, einem Benutzer einen glatten Wischvorgang zu ermöglichen. Er erstellt also alle Fragmente, die Sie gleichzeitig ausgegeben haben, um einen reibungslosen Wischfluss zu erzielen. Dies ist eigentlich die Einschränkung, da alle Methoden des Fragmentlebenszyklus gleichzeitig aufgerufen werden.

1

Wie @Mrugesh Thaker sagt, alle der Fragment Lifecycle-Funktionen - onCreateView() usw. werden jedes Mal, wenn die View eines ausgeführt Fragment aufgeblasen wird.

Hier ist die View jedes Fragment wird jedes Mal, es die benachbarten Fragment der aktuellen Fragment Seite wird aufgeblasen.

Also, sollten Sie den ‚Code jedes Fragment muss auszuführen‘ bewegen, wenn es die aktuell ausgewählte Fragment Seite in eine In Ihrem HomeTabActivityOnPageChangeListener

wird, wenn Sie die ViewPager einrichten, fügen Sie ein OnPageChangeListener zu Ihrem ViewPager

private void setupViewPager(ViewPager viewPager) {  
    . 
    . 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 
     public void onPageScrollStateChanged (int state){ 
     } 

     public void onPageSelected (int position){ 
      /* 
      * Define the action to be performed for each page. 
      * Variable 'position' is the index of the page in the ViewPager 
      */ 
     } 

     public void onPageScrolled (int position, float positionOffset, int positionOffsetPixels){ 
     } 
    }); 
} 

Learning Resource