为什么我的 TabLayout 总是同时显示当前选中的标签和下一个标签?

huangapple 未分类评论45阅读模式
英文:

Why does my tablayout always do the current tab selected and the next tab?

问题

package com.grgapps.checkingin;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
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.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);

        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();
    }

    private void configureTabLayout() {
        TabLayout tabLayout = findViewById(R.id.check_in_main_new_tab_layout);
        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.
        getMenuInflater().inflate(R.menu.check_in_new, menu);
        return true;
    }
}
package com.grgapps.checkingin;

import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;

public class CheckInMainPagerAdapter extends FragmentPagerAdapter {

    int tabCount;

    public CheckInMainPagerAdapter(FragmentManager fm, int numberOfTabs) {
        super(fm);
        this.tabCount = numberOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new CheckInRecentList();
            case 1:
                return new CheckInApproveRequested();
            case 2:
                return new CheckInSearch();
            default:
                return null;
        }
    }

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

Note: The provided code seems to contain HTML-encoded characters such as ", which are used to represent double quotes ("). These have been replaced with actual double quotes in the translated code for readability. If you intended to keep the HTML-encoded characters, you can adjust them accordingly.

英文:

I have an activity that uses a tablayout with 3 tabs. When the activity is started, it initializes (onAttach, OnCreate, OnCreatView) for tabs 1 and 2. When I select tab 2, it initializes tab 3. Does tablayout automatically do this for a reason or is there a way to tell it not to get ahead of itself.

The following is the activity java code

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;
    }

}

The following is the pager adapter for the tabs.

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

因为您的ViewPager离屏页面限制设置。默认情况下,它为1。这意味着会加载右侧和左侧的片段。更多信息请参阅文档
https://developer.android.com/reference/android/support/v4/view/ViewPager#setoffscreenpagelimit

英文:

It is because of your ViewPager offscreen page limit. By default, it is 1. It means the right and left fragments are loaded. Please refer to the documentation for more information
https://developer.android.com/reference/android/support/v4/view/ViewPager#setoffscreenpagelimit

huangapple
  • 本文由 发表于 2020年4月5日 21:29:39
  • 转载请务必保留本文链接:https://java.coder-hub.com/61043385.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定