как создавать динамические вкладки при нажатии кнопки плавающего действия [дублировать]

Что касается netbeans, вы можете установить максимальный размер кучи, чтобы решить проблему. Во-первых, перейдите в «Выполнить», затем -> «Настроить конфигурацию проекта» -> «Настроить» -> «Запустить» его всплывшего окна -> «Вариант VM» -> заполнить '-Xms2048m - Xmx2048m.

6
задан Shabbir Dhangot 29 June 2016 в 05:39
поделиться

2 ответа

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

public class MainActivity extends AppCompatActivity {

TabLayout tabLayout;
ViewPager viewPager;
Toolbar toolbar;
int no_of_categories=-1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

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

    no_of_categories=YOUR_NO_CATEGORIES;

    for (int i = 0; i < no_of_weeks; i++) {
        tabLayout.addTab(tabLayout.newTab().setText("TAB " + String.valueOf(i + 1)));
    }

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
    viewPager.setAdapter(adapter);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });


   }
}

И ваш класс адаптера должен выглядеть следующим образом:

public class ViewPagerAdapterextends FragmentStatePagerAdapter {
int mNumOfTabs;
Fragment fragment = null;

public ViewPagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    for (int i = 0; i < mNumOfTabs ; i++) {
        if (i == position) {
            fragment = YourFragment.newInstance();
            break;
        }
    }
    return fragment;

}

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

@Override
public CharSequence getPageTitle(int position) {
    return super.getPageTitle(position);
}
}
6
ответ дан Drv 17 August 2018 в 15:34
поделиться
  • 1
    но у каждого фрагмента есть собственный файл макета, как я могу управлять ими. – Milan Gajera 29 June 2016 в 06:15
  • 2
    В вашем случае, если я изменю любой layout.xml, это повлияет на каждую вкладку. – Milan Gajera 29 June 2016 в 06:15
  • 3
    Если это так, вам нужно иметь некоторый флаг с каждой категорией, который определяет, какой фрагмент вам нужно загрузить, чтобы вы могли сделать эти виды макетов фрагментов статически в своем приложении, чтобы обрабатывать разные категории. – Drv 29 June 2016 в 06:19

, если бы я был вами, я бы попробовал что-то вроде этого:

это не идеальное решение, просто идея о том, как вы можете это сделать, вам нужно будет его дополнительно модифицировать.

Создайте number of fagments = total number of categeries и назовите их как fragment0, fragment1 и так далее на общее количество категорий.

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

int count = number of categeries;

, а затем добавить фрагменты к ViewPager, как это

ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    for(int i=0; i <= count; i++){
        adapter.addFragment(new Fragment(i)(), "ONE");
        viewPager.setAdapter(adapter);
    }
}

, и назвать фрагменты, т. е. название вкладки, вы можете составить список названий фрагментов, что-то вроде этого

private final String[] title = {"One", "Two","Three"};

ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        for(int i=0; i < count; i++){
            adapter.addFragment(new Fragment(i)(), title[i]);
            viewPager.setAdapter(adapter);
        }
    }

Надеюсь, это поможет

2
ответ дан Max 17 August 2018 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: