Почему ViewPager не загружает мои фрагменты в Activity

Я новичок и застрял в каком-то проекте, над которым работаю. Я не мог найти ответа, который помог бы мне решить мою проблему. Вот что я делаю. У меня есть основное действие (действие входа в 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) {

            }
        });


    }



}

Вы уверены, что пейджер виден? Добавьте интересующую вас часть xml.

ADM 23.04.2018 16:18

Уже пробовал, иногда загружается, иногда нет

Velimir 23.04.2018 18:37
0
2
335
1

Ответы 1

ViewPager работает немного иначе, чем обычный фрагмент, вам нужно переопределить функцию setUserVisibleHint:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (!isVisibleToUser) return;
    loadUI();
}

Другие вопросы по теме