英文:
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
专注分享java语言的经验与见解,让所有开发者获益!

评论