9

Tôi muốn triển khai trình hướng dẫn với Thư viện hỗ trợ thiết kế Material Design.Cập nhật tự động TabLayout mà không thay đổi tab đã chọn

Tôi đang sử dụng ViewPagerTablayout nhưng tôi gặp sự cố khi thêm các tab mới theo cách động.

Trước tiên, tôi thiết lập widget của tôi trong onCreate phương pháp:

viewPager = (ViewPager) findViewById(R.id.tab_viewpager); 
tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFrag(new DummyFragment(), "1"); 
adapter.addFrag(new DummyFragment(), "2"); 
viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 

Sau đó, tôi muốn thêm một thẻ, khi một phần tử trong danh sách được nhấp:

adapter.addFrag(new DummyFragment(), "3"); 
adapter.notifyDataSetChanged(); 
tabLayout.setTabsFromPagerAdapter(adapter); 

Vấn đề là: sau khi thêm, thẻ đã chọn được đặt lại thành đầu tiên.

Làm cách nào để ngăn chặn hành vi này?

Trả lời

0

Chỉ cần chạy trong cùng một vấn đề, và may mắn tìm thấy một giải pháp (không phải là một xinh đẹp, nhưng nó hoạt động):

khi bạn cần cập nhật tab:

pageradapter.notifyDataSetChanged(); 
for (int i = 0; i < viewpager.getCount(); i++) { 
    sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); 
} 
0

Đây là một sửa đổi nhỏ thành mã @Kalpit. Bạn sẽ phải tự động thêm tab mới này vào bố cục của chúng tôi và gán tiêu đề bằng cách gọi cùng một phương thức từ bộ điều hợp được gọi bởi tablayout khi bạn sử dụng phương thức setupWithViewPager. Tôi đã sử dụng câu lệnh try catch này cho các tab chưa được tạo nhưng bạn có thể cố gắng gán cho họ một số tiêu đề.

adapter.notifyDataSetChanged(); 
    for(int i = 0;i<adapter.getCount();i++){ 
     try{ 
     tablayout.getTabAt(i).setText(adapter.getPageTitle(i)); 
     } 
     catch(IndexOutOfBoundException e){ 
     tablayout.addTab(tablayout.newTab().setText(adapter.getPageTitle(i)); 
     } 
    } 
Các vấn đề liên quan