Как не показывать некоторые вкладки при активности вкладок?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как не показывать некоторые вкладки при активности вкладок?

Сообщение Anonymous »

У меня есть следующее действие, в котором показаны разные вкладки.

Код: Выделить всё

public class BagContent extends FragmentActivity implements ActionBar.TabListener, CosmeListener {

String[] profileTypes;

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {

setContentView(R.layout.activity_bag_content);
mViewPager = (ViewPager) findViewById(R.id.pager);
final ActionBar actionBar = getActionBar();
actionBar.setTitle(getString(R.string.title_activity_bag_content) + " [" + bagName + "]");
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}

@Override
public void onPageScrollStateChanged(int state) {

}
});

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
}
}

@Override
protected void onResume() {
super.onResume();
// TODO Auto-generated method stub
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in
// the ViewPager.
mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {

public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FormatShortFragment();
case 1:
return new FormatLongFragment();
case 2:
return new FormatPlantFragment();
}

return null;
}

@Override
public int getCount() {
// Show 3 total pages.
return 3;
}

@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_bag_content_format_short).toUpperCase(l);
case 1:
return getString(R.string.title_bag_content_format_long).toUpperCase(l);
case 2:
return getString(R.string.title_bag_content_format_plant).toUpperCase(l);
}
return null;
}
}
У меня есть массив с разными типами профилей, в зависимости от каждого типа мне нужно показывать те или иные вкладки.
На самом деле все вкладки отображаются для каждого типа профиля. Пробовал вручную вставлять вкладки на панель действий, но тогда на вкладках некорректно отображаются фрагменты. Другая проблема заключается в том, что навигация прерывается, когда я перехожу на несуществующую вкладку на правом краю.
Мне нужна помощь с этим, как я могу выбрать только 1 вкладку для определенного типа профиля?
например, как я могу показать только title_bag_content_format_long и его фрагмент для ProfileTypes[1]?
Любой обходной путь может быть полезен, например, удалить некоторые вкладки из некоторых типов профиля или любого другого другое.
Большое спасибо, ребята, мне действительно нужна помощь с этим.
ОТРЕДАКТИРОВАНО
Я внес некоторые изменения:
Добавлен параметр типа профиля в конструктор секцииPagerAdapter:

Код: Выделить всё

private String profileType;
public SectionsPagerAdapter(FragmentManager fm, String profileType) {
super(fm);
this.profileType = profileType;
}
Затем я изменил другие методы для управления типом профиля:

Код: Выделить всё

    @Override
public Fragment getItem(int position) {
if (this.profileType.equals(profileTypes[1])){
switch (position) {
case 0:
return new FormatPlantFragment();
}
} else {
switch (position) {
case 0:
return new FormatShortFragment();
case 1:
return new FormatLongFragment();
case 2:
return new FormatPlantFragment();
}
}

return null;
}

@Override
public int getCount() {
if (this.profileType.equals(profileTypes[1])){
return 1;
}
return 3;
}

@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
if (this.profileType.equals(profileTypes[1])){
switch (position) {
case 0:
return getString(R.string.title_bag_content_format_plant).toUpperCase(l);
}
} else {
switch (position) {
case 0:
return getString(R.string.title_bag_content_format_short).toUpperCase(l);
case 1:
return getString(R.string.title_bag_content_format_long).toUpperCase(l);
case 2:
return getString(R.string.title_bag_content_format_plant).toUpperCase(l);
}
}
return null;
}
Это работает правильно и делает фильтр по типу профиля более универсальным.
Спасибо Filpe.costa01, который дал мне необходимый толчок.

Подробнее здесь: https://stackoverflow.com/questions/327 ... d-activity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»