Android 刷新幻灯片布局

Android 刷新幻灯片布局,android,android-viewpager,android-5.0-lollipop,Android,Android Viewpager,Android 5.0 Lollipop,图片中的示例: 空PagerView PagerView包含新内容(slidengtablayout不更新) 视图的新实例(SlidingTabLayoutupdated) 这是我的代码: public class CharSortFragment extends Fragment { private final String TAG = "CharSortFragment"; private ViewPager viewPager; private TabsP

图片中的示例:

  • PagerView
  • PagerView
    包含新内容(
    slidengtablayout
    不更新)
  • 视图的新实例(
    SlidingTabLayout
    updated)

    这是我的代码:

    public class CharSortFragment extends Fragment {
    
        private final String TAG = "CharSortFragment";
    
        private ViewPager viewPager;
        private TabsPagerAdapter tabsAdapter;
        private SlidingTabLayout slidingTabLayout;
    
        private FragmentActivity activity;
    
        public CharSortFragment() {}
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            Log.d(TAG, "OnCreate view...");
            final View view = inflater.inflate(R.layout.char_sort_fragment, container, false);
            activity = getActivity();
    
            Log.d(TAG, "Init add button...");
            FloatingActionButton addButton = (FloatingActionButton) view.findViewById(R.id.add_button);
            addButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "Add button was clicked...");
                    startActivityForResult(new Intent(getActivity(), EditActivity.class), 1);
                }
            });
    
            viewPager = (ViewPager) view.findViewById(R.id.pager);
            tabsAdapter = new TabsPagerAdapter(activity.getSupportFragmentManager());
            viewPager.setAdapter(tabsAdapter);
    
            Log.d(TAG, "Connecting PagerSlidingTabStrip...");
            slidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.tabs);
            slidingTabLayout.setViewPager(viewPager);
    
            Log.d(TAG, "OnCreate finished!");
            return view;
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.d(TAG, "On activity result: " + resultCode);
    
            if(resultCode == 1) {
                Log.d(TAG, "Notify data changes...");
                tabsAdapter.updateCharSet();
                tabsAdapter.notifyDataSetChanged();
                slidingTabLayout.invalidate();
                CardListFragment cardListFragment = tabsAdapter.currentFragment;
                /* Обновляем TabsAdapter всегда, ибо я ленивая жопа
                if(tabsAdapter.currentFragment == null) {
                    tabsAdapter.updateCharSet();
                    tabsAdapter.notifyDataSetChanged();
                    cardListFragment = tabsAdapter.currentFragment;
                }
                */
                RecyclerViewAdapter recyclerViewAdapter = cardListFragment.getAdapter();
                recyclerViewAdapter.updateDataSet();
                recyclerViewAdapter.notifyDataSetChanged();
                Log.d(TAG, "Views was notified!");
            }
        }
    
        public class TabsPagerAdapter extends FragmentPagerAdapter {
    
            private final String TAG = "TabsPagerAdapter";
    
            private final HashSet<TongueTwister> data = TongueTwistersStorageManager.getInstance().getData();
            private final ArrayList<Character> characters = new ArrayList<>();
    
            private CardListFragment currentFragment;
    
            public TabsPagerAdapter(FragmentManager fm) {
                super(fm);
                Log.i(TAG, "Creating TabsPagerAdapter...");
                updateCharSet();
            }
    
            @Override
            public Fragment getItem(int position) {
                char charAtCurrentPos = characters.get(position);
                return CardListFragment.newInstance(charAtCurrentPos);
            }
    
            protected void updateCharSet() {
                this.characters.clear();
                this.characters.addAll(generateCharList());
            }
    
            private ArrayList<Character> generateCharList() {
                Log.i(TAG, "Generating char list...");
                Log.i(TAG, "Total tongue twisters: " + data.size());
                HashSet<Character> hashCharacters = new HashSet<>();
                for (TongueTwister tongueTwister : data) {
                    for(char character : tongueTwister.getCharacters()) {
                        if(!hashCharacters.contains(character)) {
                            Log.i(TAG, "Char: " + character);
                            hashCharacters.add(character);
                        }
                    }
                }
                Log.i(TAG, "Sorting...");
                ArrayList<Character> characters = new ArrayList<>(hashCharacters);
                Collections.sort(characters);
                Log.i(TAG, "Char list was generated!");
                return characters;
            }
    
            @Override
            public int getCount() {
                return characters.size();
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                return String.valueOf(characters.get(position));
            }
    
            @Override
            public void setPrimaryItem(ViewGroup container, int position, Object object) {
                currentFragment = (CardListFragment) object;
            }
    
        }
    
    }
    
    公共类CharSortFragment扩展片段{
    私有最终字符串标记=“CharSortFragment”;
    私人视页机视页机;
    私人TabsPagerAdapter Tabsdapter;
    私人滑出滑出;
    私人碎片活动;
    public CharSortFragment(){}
    @凌驾
    CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
    Log.d(标记“OnCreate视图…”);
    最终视图=充气机。充气(R.layout.char\u sort\u片段,容器,false);
    activity=getActivity();
    Log.d(标记“Init add button…”);
    FloatingActionButton addButton=(FloatingActionButton)view.findViewById(R.id.add_按钮);
    addButton.setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    Log.d(标记“单击添加按钮…”);
    startActivityForResult(新意图(getActivity(),EditActivity.class),1);
    }
    });
    viewPager=(viewPager)view.findViewById(R.id.pager);
    tabsAdapter=new TabsPagerAdapter(activity.getSupportFragmentManager());
    viewPager.setAdapter(tabsAdapter);
    Log.d(标记为“连接页面LidingTabstrip…”);
    slidingTabLayout=(slidingTabLayout)view.findViewById(R.id.tabs);
    slidingTabLayout.setViewPager(viewPager);
    Log.d(标记“oncreatefinished!”);
    返回视图;
    }
    @凌驾
    ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
    Log.d(标记“关于活动结果:”+resultCode);
    if(resultCode==1){
    Log.d(标签“通知数据更改…”);
    tabsAdapter.updateCharSet();
    tabsAdapter.notifyDataSetChanged();
    slidingTabLayout.invalidate();
    CardListFragment-CardListFragment=tabsAdapter.currentFragment;
    /*ббббббббббб
    if(tabsAdapter.currentFragment==null){
    tabsAdapter.updateCharSet();
    tabsAdapter.notifyDataSetChanged();
    cardListFragment=tabsAdapter.currentFragment;
    }
    */
    RecycleWebAdapter RecycleWebAdapter=cardListFragment.getAdapter();
    RecycleServiceAdapter.updateDataSet();
    RecycleServiceAdapter.notifyDataSetChanged();
    Log.d(标记“已通知视图!”);
    }
    }
    公共类选项卡SpagerAdapter扩展了FragmentPagerAdapter{
    私有最终字符串TAG=“TabsPagerAdapter”;
    private final HashSet data=TongueTwistersStorageManager.getInstance().getData();
    私有最终ArrayList字符=新ArrayList();
    私有CardListFragment当前片段;
    公共选项卡SpagerAdapter(FragmentManager fm){
    超级(fm);
    Log.i(标记“创建TabsPagerAdapter…”);
    updateCharSet();
    }
    @凌驾
    公共片段getItem(int位置){
    charactercurrentpos=characters.get(位置);
    返回CardListFragment.newInstance(charAtCurrentPos);
    }
    受保护的void updateCharSet(){
    this.characters.clear();
    this.characters.addAll(generateCharList());
    }
    私有ArrayList generateCharList(){
    Log.i(标记“生成字符列表…”);
    Log.i(标签,“总舌绕口令:+data.size());
    HashSet hashCharacters=新HashSet();
    for(舌片捻线器舌片捻线器:数据){
    for(字符:tongueTwister.getCharacters()){
    如果(!hashCharacters.contains(字符)){
    Log.i(标记,“Char:+字符);
    hashCharacters.add(字符);
    }
    }
    }
    Log.i(标记“排序…”);
    ArrayList字符=新的ArrayList(哈希字符);
    集合。排序(字符);
    i(标记“Char list was generated!”);
    返回字符;
    }
    @凌驾
    public int getCount(){
    返回字符。size();
    }
    @凌驾
    公共字符序列getPageTitle(int位置){
    返回String.valueOf(characters.get(position));
    }
    @凌驾
    公共void setPrimaryItem(视图组容器、int位置、对象){
    currentFragment=(CardListFragment)对象;
    }
    }
    }
    
    如何刷新
    幻灯片布局
    ?(
    slidengtablayout.invalidate()
    对我不起作用)

    找到了解决方案! 更新其适配器后,只需设置
    ViewPager

            tabsAdapter.updateCharSet(); // Updating FragmentPagerAdapter
            tabsAdapter.notifyDataSetChanged();
    
            slidingTabLayout.setViewPager(viewPager); // Updating SlidingTabStrip