android sliding tab,android – 刷新SlidingTabLayout

图片中的示例:

>清空PagerView

b9ace17d82cd57a44e841204341aa48a.png

>具有新内容的PagerView(SlidingTabLayout不更新)

67fbce983a19c46ccf676d38a3351b23.png

>新的视图实例(SlidingTabLayout已更新);

2fe59142eef4bd26f15db8cd8edc58dc.png

这是我的代码:

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 data = TongueTwistersStorageManager.getInstance().getData();

private final ArrayList 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 generateCharList() {

Log.i(TAG, "Generating char list...");

Log.i(TAG, "Total tongue twisters: " + data.size());

HashSet 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 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;

}

}

}

我该如何刷新SlidingTabLayout? (slidingTabLayout.invalidate()对我不起作用)

解决方法:

找到了解决方案!

只需在更新其适配器后设置ViewPager:

tabsAdapter.updateCharSet(); // Updating FragmentPagerAdapter

tabsAdapter.notifyDataSetChanged();

slidingTabLayout.setViewPager(viewPager); // Updating SlidingTabStrip

标签:android,android-viewpager,android-5-0-lollipop

来源: https://codeday.me/bug/20190728/1558850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值