Невозможно добавить измененный пользовательский вид в качестве другого пользовательского просмотра макета вкладки

Я хочу динамически добавлять вкладки в TabLayout. Я могу добавлять разные объекты как разные пользовательские представления.

Проблема в том, что мне нужно динамически добавлять различное количество пользовательских представлений, и я не хочу создавать разные экземпляры view для каждой вкладки, если это возможно.

    TabLayout mTabLayout = (TabLayout) findViewById(R.id.tabs);
    TextView textView = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
    textView.setText ( "HIM" );
    mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView).setTag ( "0" ));
    TextView textView1 = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
    textView1.setText ( "HER" );
    mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView1).setTag ( "1" ));
    textView1  = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
    textView1.setText ( "OTHERS" );
    mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView1).setTag ( "2" ));

Если я прикреплю пользовательские представления, как указано выше, я получу этот результат. введите здесь описание изображения

        TabLayout mTabLayout = (TabLayout) findViewById(R.id.tabs);
        TextView textView = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
        textView.setText ( "HIM" );
        mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView).setTag ( "0" ));
        TextView textView1 = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
        textView1.setText ( "HER" );
        mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView1).setTag ( "1" ));
        textView1  = (TextView)getLayoutInflater ().inflate ( R.layout.simple_text_layout,null,false );
        textView1.setText ( "OTHERS" );
        mTabLayout.addTab(mTabLayout.newTab().setCustomView ( textView1).setTag ( "2" ));
        textView1.setText ( "ACCESS.." );

         mTabLayout.addTab(mTabLayout.newTab().setCustomView (     textView1).setTag ( "3" ));

Если я прикреплю элементы, подобные выше, в свой tabLayout, я получу этот результат.

введите здесь описание изображения

Может ли кто-нибудь указать на то, что я делаю неправильно, пытаясь использовать один и тот же объект представления для нескольких настраиваемых представлений для tabLayout с измененными значениями?


person erluxman    schedule 26.12.2016    source источник
comment
что ты хочешь делать? создание нескольких настраиваемых вкладок с помощью окна просмотра?   -  person Noorul    schedule 26.12.2016
comment
Просто, потому что я хочу настроить вкладки.   -  person erluxman    schedule 26.12.2016
comment
ждать. я обновлю ответ   -  person Noorul    schedule 26.12.2016


Ответы (1)


Я использовал SmartTabLayout. Вы можете настроить его под свои нужды.

инициализировать макеты:

   viewPager.setOffscreenPageLimit(tabContent.size());
   final SmartTabLayout viewPagerTab = (SmartTabLayout) view.findViewById(R.id.viewpagertab);
   setUpTab(viewPagerTab, viewPager.getContext());
   viewPagerTab.setViewPager(viewPager);

тогда,

создать список вкладок.

List<String> tabContent= new ArrayList<>();

Функция SetupTab Ниже:

     private void setUpTab(final SmartTabLayout layout, Context context) {
    final LayoutInflater inflater = LayoutInflater.from(context);
    layout.setCustomTabView(new SmartTabLayout.TabProvider() {
        @Override
        public View createTabView(ViewGroup container, int position, PagerAdapter adapter) {
            @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.custom_tab, null);
            TextView customtextView = (TextView) view.findViewById(R.id.txtCustomTab);
            String tab= tabContent.get(position);
            customtextView.setText(tab);                
            return customtextView;
        }

    });
}

установить адаптер пейджера:

   pagerAdapter = new TabPagerAdapter(getChildFragmentManager(), tabContent);
    viewPager.setAdapter(pagerAdapter);

TabPagerAdapter класс

  public class TabPagerAdapter extends FragmentStatePagerAdapter {


List<String> list;
private Context context;

public TabPagerAdapter(FragmentManager fm, List<String> list) {
    super(fm);
    this.list = list;
}


public void setContext(Context context) {
    this.context = context;
}


@Override
public Fragment getItem(int position) {
    return setListItems(position);
}

private Fragment setListItems(int pos) {
    YourCustomFragment fragment = new YourCustomFragment();
    fragment.setData(list.get(pos));
    return fragment;
}

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

public TabPagerAdapter setTitle(boolean hasTitle) {
    return this;
}
  }
person Noorul    schedule 26.12.2016