Почему в моей вкладке всегда выбрана текущая вкладка и следующая вкладка? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть действие, в котором используется табуляция с 3 вкладками. Когда действие запускается, оно инициализирует (onAttach, OnCreate, OnCreatView) для вкладок 1 и 2. Когда я выбираю вкладку 2, она инициализирует вкладку 3. Автоматически ли это делает tablayout по какой-то причине или есть способ сказать, что опередить себя.

Ниже приведено действие java код

package com.grgapps.checkingin;



import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import static androidx.constraintlayout.widget.Constraints.TAG;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;


public class CheckInNew extends AppCompatActivity implements
        CheckInNewGeneral.OnFragmentInteractionListener,
        CheckInNewFrequency.OnFragmentInteractionListener,
        CheckInNewRecipients.OnFragmentInteractionListener,
        CheckInNewCurrentLocation.OnFragmentInteractionListener,
        CheckInNewDestination.OnFragmentInteractionListener {



        private AdView mAdView;
        Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.context = context;
        setContentView(R.layout.activity_check_in_new);

        Toolbar toolbar = findViewById(R.id.toolbar);
        //setSupportActionBar(toolbar);
        Log.i(TAG, "CheckInNew onCreate: ");

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adViewCheckInNewCurrentLocation);
        AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
        mAdView.loadAd(adRequest);


        DrawerUtil.getDrawer(this,toolbar);
        configureTabLayout();
        Log.i(TAG, "CheckInNew onCreate: Completed OnCreate");
    }

    private void configureTabLayout() {
        TabLayout tabLayout = findViewById(R.id.check_in_main_new_tab_layout);
        Log.i(TAG, "CheckInNew configureTabLayout: ");
        tabLayout.addTab(tabLayout.newTab().setText("General"));
        tabLayout.addTab(tabLayout.newTab().setText("Frequency"));
        tabLayout.addTab(tabLayout.newTab().setText("Recipients"));
        tabLayout.addTab(tabLayout.newTab().setText("Current Location"));
        tabLayout.addTab(tabLayout.newTab().setText("Destination"));

        final ViewPager viewPager = findViewById(R.id.check_in_new_main_pager);
        final PagerAdapter adapter = new CheckInNewMainPagerAdapter
                (getSupportFragmentManager(),
                        tabLayout.getTabCount());
        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new
                TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.addOnTabSelectedListener(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) {
                       }

               });
    }

    @Override
    public void onFragmentInteraction(Uri uri) {
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        Log.i(TAG, "CheckInNew onCreateOptionsMenu: ");
        getMenuInflater().inflate(R.menu.check_in_new, menu);
        return true;
    }

}

Ниже приведен адаптер пейджера для вкладок.

package com.grgapps.checkingin;
import android.util.Log;

import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import static androidx.constraintlayout.widget.Constraints.TAG;

public class CheckInMainPagerAdapter extends FragmentPagerAdapter {

    int tabCount;

    public CheckInMainPagerAdapter(FragmentManager fm, int numberOfTabs) {
        super(fm);
        Log.i(TAG, "CheckInMainPagerAdapter: ");
        this.tabCount = numberOfTabs;
    }
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                Log.i(TAG, "CheckInMainPagerAdapter Case 0 getItem: ");
                return new CheckInRecentList();
            case 1:
                Log.i(TAG, "CheckInMainPagerAdapter Case 1 getItem: ");
                return new CheckInApproveRequested();
            case 2:
                Log.i(TAG, "CheckInMainPagerAdapter Case 2 getItem: ");
                return new CheckInSearch();
            default:
                return null;
        }
    }
    @Override
    public int getCount() {
        return tabCount;
    }
}

1 Ответ

0 голосов
/ 05 апреля 2020

Это связано с ограничением количества страниц за пределами ViewPager. По умолчанию это 1. Это означает, что правый и левый фрагменты загружены. Пожалуйста, обратитесь к документации для получения дополнительной информации https://developer.android.com/reference/android/support/v4/view/ViewPager#setoffscreenpagelimit

...