选项卡布局在所有选项卡上加载相同数据

时间:2017-12-05 16:50:04

标签: android retrofit2 android-tablayout

我有三个标签。第一个选项卡显示从搜索框搜索的互联网图像,其他两个选项卡显示随机图像。问题是,当我第一次打开任何标签时,图像被正确加载,但是当我移动到下一个标签时,前一个标签的图像显示在此选项卡中,然后所有标签显示相同的图像。 如何解决这个问题?

这是我的主要活动

ViewPager viewPager;
Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewPager);
    setUpViewPager(viewPager);
    viewPager.setOffscreenPageLimit(2);

    final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);

}

private void setUpViewPager(ViewPager viewPager){
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragment(new SearchFragment(), "SEARCH");
    viewPagerAdapter.addFragment(new RandomFragment(), "RANDOM");
    viewPagerAdapter.addFragment(new DailyFragment(), "DAILY");
    viewPager.setAdapter(viewPagerAdapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter{

    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> titleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager){
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    public void addFragment(Fragment fragment, String title){
        fragmentList.add(fragment);
        titleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titleList.get(position);
    }
}

这是第一个标签

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_search, container, false);

    search_image = (EditText) view.findViewById(R.id.search_image);
    searchButton = (Button) view.findViewById(R.id.search_button);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerViewSearch);
    layoutManager = new GridLayoutManager(getContext(), 2);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setVisibility(View.INVISIBLE);
    mProgressBar = (ProgressBar) view.findViewById(R.id.loadingIndicator);

    updateView();

    return view;
}


public void updateView(){
    mProgressBar.setIndeterminateDrawable(new ChromeFloatingCirclesDrawable
            .Builder(getContext())
            .build());
    mProgressBar.setVisibility(View.INVISIBLE);
    searchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mProgressBar.setVisibility(View.VISIBLE);
            WallpaperInterface wallpaperInterface = Client.getClient().create(WallpaperInterface.class);
            Call<WallpaperDetails> wallpaperDetailsCall = wallpaperInterface.getImages(API_KEY, search_image.getText().toString());
            wallpaperDetailsCall.enqueue(new Callback<WallpaperDetails>() {
                @Override
                public void onResponse(Call<WallpaperDetails> call, Response<WallpaperDetails> response) {
                    List<Wallpapers> wallpapersList = response.body().getHits();
                    recyclerView.setAdapter(new WallpaperAdapter(wallpapersList, getContext()));
                    mProgressBar.setVisibility(View.INVISIBLE);
                    recyclerView.setVisibility(View.VISIBLE);
                }

                @Override
                public void onFailure(Call<WallpaperDetails> call, Throwable t) {
                    Log.e("Error: ", t.toString());
                }
            });
        }
    });
}

这是第二个标签

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_random, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerViewRandom);
    layoutManager = new GridLayoutManager(getContext(), 2);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setVisibility(View.INVISIBLE);
    mProgressBar = (ProgressBar) view.findViewById(R.id.loadingIndicator);

    updateView();

    return view;
}

public void updateView(){
    mProgressBar.setIndeterminateDrawable(new ChromeFloatingCirclesDrawable
            .Builder(getContext())
            .build());

    WallpaperInterface wallpaperInterface = Client.getClient().create(WallpaperInterface.class);
    Call<WallpaperDetails> wallpaperDetailsCall = wallpaperInterface.getImages(API_KEY, "wallpapers");
    wallpaperDetailsCall.enqueue(new Callback<WallpaperDetails>() {
        @Override
        public void onResponse(Call<WallpaperDetails> call, Response<WallpaperDetails> response) {
            List<Wallpapers> wallpapersList = response.body().getHits();
            recyclerView.setAdapter(new WallpaperAdapter(wallpapersList, getContext()));
            mProgressBar.setVisibility(View.INVISIBLE);
            recyclerView.setVisibility(View.VISIBLE);
        }

        @Override
        public void onFailure(Call<WallpaperDetails> call, Throwable t) {
            Log.e("Error: ", t.toString());
        }
    });
}

这是第三个标签

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_daily, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerViewDaily);
    layoutManager = new GridLayoutManager(getContext(), 2);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setVisibility(View.INVISIBLE);
    mProgressBar = (ProgressBar) view.findViewById(R.id.loadingIndicator);

    updateView();

    return view;
}

public void updateView(){
    mProgressBar.setIndeterminateDrawable(new ChromeFloatingCirclesDrawable
            .Builder(getContext())
            .build());

    WallpaperInterface wallpaperInterface = Client.getClient().create(WallpaperInterface.class);
    Call<WallpaperDetails> wallpaperDetailsCall = wallpaperInterface.getImages(API_KEY, "daily");
    wallpaperDetailsCall.enqueue(new Callback<WallpaperDetails>() {
        @Override
        public void onResponse(Call<WallpaperDetails> call, Response<WallpaperDetails> response) {
            List<Wallpapers> wallpapersList = response.body().getHits();
            recyclerView.setAdapter(new WallpaperAdapter(wallpapersList, getContext()));
            mProgressBar.setVisibility(View.INVISIBLE);
            recyclerView.setVisibility(View.VISIBLE);
        }

        @Override
        public void onFailure(Call<WallpaperDetails> call, Throwable t) {
            Log.e("Error: ", t.toString());
        }
    });
}

请帮忙。 提前谢谢!

0 个答案:

没有答案
相关问题