Я новичок и застрял в каком-то проекте, над которым работаю. Я не мог найти ответа, который помог бы мне решить мою проблему. Вот что я делаю. У меня есть основное действие (действие входа в GitHub), где я перейду ко второму действию и загрузю 4 фрагмента (фрагмент пользователя, фрагмент репозитория, фрагмент подписчиков и следующий фрагмент). Проблема в том, что когда я использую пейджер View, он не загружает фрагменты. Когда я загружаю любой фрагмент с помощью транзакции фрагмента, все работает нормально, как и ожидалось. Я действительно не знаю, где я сделал ошибку в своем коде.
public class DetailPageAdapter extends FragmentPagerAdapter {
public static final String[] fragments = {"Profile", "Repository"}; //, "Followers", "Following"};
public DetailPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new UserProfileFragment();
case 1:
return new UserRepositoryFragment();
// case 2:
// return new UserFollowersFragment();
// case 3:
// return new UserFollowingFragment();
}
return null;
}
@Override
public int getCount() {
return fragments.length;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
public class DetailUserActivity extends AppCompatActivity {
private ViewPager viewPager;
private Toolbar toolbar;
private TabLayout tabs;
private DetailPageAdapter adapter;
private LinearLayout fragmentContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
fragmentContainer = findViewById(R.id.fragmentContainer);
toolbar = new Toolbar(this);
setSupportActionBar(toolbar);
tabs = findViewById(R.id.tabs);
viewPager = findViewById(R.id.viewPager);
adapter = new DetailPageAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tabs.setupWithViewPager(viewPager);
}
}
public class UserProfileFragment extends Fragment {
public static final String NAME_ORIGINAL_STATE = "NAME_ORIGINAL_STATE";
public static final String LOGIN_ORIGINAL_STATE = "LOGIN_ORIGINAL_STATE";
public static final String LOCATION_ORIGINAL_STATE = "LOCATION_ORIGINAL_STATE";
public static final String AVATAR_ORIGINAL_URL = "AVATAR_ORIGINAL_URL";
private ImageView avatar;
private TextView name, login, location;
private String imgUrl;
public UserProfileFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_user_profile, container, false);
avatar = view.findViewById(R.id.avatar);
name = view.findViewById(R.id.name);
location = view.findViewById(R.id.location);
login = view.findViewById(R.id.login);
if (savedInstanceState == null) {
displayContent();
} else {
restorePreviousValues(savedInstanceState);
}
return view;
}
private void restorePreviousValues(Bundle savedInstanceState) {
name.setText(savedInstanceState.getString(NAME_ORIGINAL_STATE));
location.setText(savedInstanceState.getString(LOCATION_ORIGINAL_STATE));
login.setText(savedInstanceState.getString(LOGIN_ORIGINAL_STATE));
GlideApp
.with(getContext())
.load(savedInstanceState.getString(AVATAR_ORIGINAL_URL))
.into(avatar);
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putString(NAME_ORIGINAL_STATE, name.getText().toString());
outState.putString(LOCATION_ORIGINAL_STATE, location.getText().toString());
outState.putString(LOGIN_ORIGINAL_STATE, login.getText().toString());
outState.putString(AVATAR_ORIGINAL_URL, imgUrl);
}
private void displayContent() {
GitHubUserEndPoint apiService = APIClient.getClient().create(GitHubUserEndPoint.class);
Call<GitHubUser> call = apiService.getUser(user);
call.enqueue(new Callback<GitHubUser>() {
@Override
public void onResponse(Call<GitHubUser> call, Response<GitHubUser> response) {
if (response.body() != null){
try {
name.setText(response.body().getName());
login.setText(response.body().getLogin());
location.setText(response.body().getLocation());
imgUrl = response.body().getAvatar();
GlideApp
.with(getContext())
.load(imgUrl)
.into(avatar);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<GitHubUser> call, Throwable t) {
}
});
}
}
Уже пробовал, иногда загружается, иногда нет
ViewPager работает немного иначе, чем обычный фрагмент, вам нужно переопределить функцию setUserVisibleHint:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isVisibleToUser) return;
loadUI();
}
Вы уверены, что пейджер виден? Добавьте интересующую вас часть xml.