java - 在选项卡 View 中交换 View 寻呼机时增加 Recyclerview 的项目

标签 java android android-recyclerview android-viewpager tabview

我创建了一个带有四个选项卡的选项卡 View ,并在此选项卡 View 中使用了 View 分页器。在 View 分页器中,我设置了 recyclerview。我给每个 recyclerview 提供了五个项目列表,最初每个 recyclerview 显示 5 个项目,但交换回来这些项目变成了两倍。

我的主要java Activity

public class WorldMAp extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.worldmap_activity);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

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

}
private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(R.drawable.iconmap);
    tabLayout.getTabAt(1).setIcon(R.drawable.iconmap);
    tabLayout.getTabAt(2).setIcon(R.drawable.iconmap);
}
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Tab1Fragment(), "Countries");
    adapter.addFragment(new Tab2Fragment(), "RIVERS");
    adapter.addFragment(new Tab3Fragment(), "PEAKS");
    adapter.addFragment(new Tab4Fragment(), "WONDERS");
    viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

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

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

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

回收者 View 适配器

public class Country_Adapter extends 
RecyclerView.Adapter<Country_Adapter.MyViewHolder> {

private List<Country> countryList;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title,  genre;
    public ImageView imageView;

    public MyViewHolder(View view) {
        super(view);
        title = (TextView) view.findViewById(R.id.title);
        genre = (TextView) view.findViewById(R.id.genre);
        imageView=(ImageView)view.findViewById(R.id.image);

    }
}


public Country_Adapter(List<Country> countryList) {
    this.countryList = countryList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.country_list, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Country movie = countryList.get(position);
    holder.title.setText(movie.getTitle());
    holder.genre.setText(movie.getGenre());
    holder.imageView.setBackgroundResource(R.drawable.share);
}

@Override
public int getItemCount() {
    return countryList.size();
}
}

标签 View

 private List<Country> countryList = new ArrayList<>();
private RecyclerView recyclerView;
private Country_Adapter mAdapter;
ImageView imageView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tab1_fragment,container,false);

    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

    mAdapter = new Country_Adapter(countryList);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(mAdapter);
    prepareMovieData();
 return view;
}
private void prepareMovieData() {
    Country country = new Country("Mad Max: Fury Road", "Action & Adventure");
    countryList.add(country);

    Country country1 = new Country("Mad Max: Fury Road", "Action & Adventure");
    countryList.add(country1);
    Country country2 = new Country("Mad Max: Fury Road", "Action & Adventure");
    countryList.add(country2);
    Country country3 = new Country("Mad Max: Fury Road", "Action & Adventure");
    countryList.add(country3);
    Country country4 = new Country("Mad Max: Fury Road", "Action & Adventure");
    countryList.add(country4);


}

如何防止这些自动增加的项目?

最佳答案

默认情况下,ViewPage 可以容纳 2 个 fragment ,而您正在使用 4 个 fragment ,因此在转到 4 后如果返回到 1,则会调用第一个 fragment 的 onCreate,反之亦然。防止这种使用

     mViewPager.setOffscreenPageLimit(4);

setOffscreenPageLimit 将维护堆栈中的所有 4 个 fragment 并防止重新创建。

关于java - 在选项卡 View 中交换 View 寻呼机时增加 Recyclerview 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46861224/

相关文章:

android - 在 Eclipse 中使用数组向画廊图像添加声音

android - 未显示所有数据,但带有 RecyclerView 的 AdMobs

out-of-memory - 使用 RecyclerView 时出现 android OutOfMemoryError

android - Android Studio 1.1.0 中 android.support.v7.widget.RecyclerView 的渲染问题 : java. lang.NullPointerException

java - Drools - 从具有不同事实的多个 DRL 文件中触发多个规则

java - 如何将数据和程序集成到单个可执行文件中?

android - 纵向单列 ListView 但横向两列?

java - 错误 :The type javax. portlet.PortletContext 无法解析

java - 从启动器隐藏应用程序图标

java - 在sqlite数据库中保存和检索键值对android