Вкладка Actionbar в API 10

#android #tabs #navigation #android-actionbar

#Android #вкладки #навигация #android-actionbar

Вопрос:

У меня есть приложение с 4 вкладками actionbar. Хотя я импортировал android.support.v7.app. Библиотека ActionBar, она отображается только в устройстве API 16, но не в устройстве API 10. Каково же здесь решение? Основная деятельность:

 import android.app.ActionBar;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBar.TabListener;
import android.support.v7.app.ActionBarActivity;


public class MainActivity extends ActionBarActivity {
public android.support.v7.app.ActionBar actionbar;
public ViewPager viewpager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    actionbar = getSupportActionBar();
    actionbar.setDisplayShowHomeEnabled(false);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    viewpager = (ViewPager) findViewById(R.id.pager);
    FragmentManager fm = getSupportFragmentManager();
    addPageChangeListener();
    MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm);
    viewpager.setAdapter(fragmentPagerAdapter);
    addActionBarListener();

}

public void addPageChangeListener() {
    ViewPager.OnPageChangeListener pageChangeListener = new OnPageChangeListener() {

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

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }
    };
    viewpager.setOnPageChangeListener(pageChangeListener);
}

public void addActionBarListener() {
    android.support.v7.app.ActionBar.TabListener listener = new TabListener() {

        @Override
        public void onTabUnselected(
                android.support.v7.app.ActionBar.Tab arg0,
                android.support.v4.app.FragmentTransaction arg1) {
        }

        @Override
        public void onTabSelected(android.support.v7.app.ActionBar.Tab tab,
                android.support.v4.app.FragmentTransaction arg1) {
            viewpager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabReselected(
                android.support.v7.app.ActionBar.Tab arg0,
                android.support.v4.app.FragmentTransaction arg1) {
        }
    };
    android.support.v7.app.ActionBar.Tab tab = actionbar.newTab()
            .setTabListener(listener);
    tab.setCustomView(R.layout.search);
    actionbar.addTab(tab);
    tab = actionbar.newTab().setTabListener(listener);
    tab.setCustomView(R.layout.filter);
    actionbar.addTab(tab);
    tab = actionbar.newTab().setTabListener(listener);
    tab.setCustomView(R.layout.favorite);
    actionbar.addTab(tab);
    tab = actionbar.newTab().setTabListener(listener);
    tab.setCustomView(R.layout.info);
    actionbar.addTab(tab);
}
  

}

Адаптер MyPagerFragmentAdapter:

 import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

public final int PAGE_COUNT = 4;

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

@Override
public Fragment getItem(int i) {
    // TODO Auto-generated method stub
    Bundle data = new Bundle();
    switch (i) {
    case 0:
        SearchFragment searchFragment = new SearchFragment();
        return searchFragment;
    case 1:
        FilterFragment filterFragment = new FilterFragment();
        return filterFragment;
    case 2:
        FavoriteFragment favoriteFragment = new FavoriteFragment();
        return favoriteFragment;
    case 3:
        InfoFragment infoFragment = new InfoFragment();

        return infoFragment;

    }
    return null;
}

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

}

Макет основной деятельности:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  

Комментарии:

1. разместите свой код здесь…

2. И мы должны волшебным образом угадать ошибку? Если бы я сказал вам «Моя машина сломана», вы смогли бы точно определить проблему?

3. Я добавил код. Я настроил представления вкладок с изображениями вместо текста.

Ответ №1:

Попробуйте заменить import android.app.ActionBar;

с этим import android.support.v7.app.ActionBar; .

Также проверьте, что тема вашего приложения должна быть android:theme="@style/Theme.AppCompat" в вашем AndroidManifest.xml файле

Для получения более подробной информации обратитесь к ссылке ниже…

http://wptrafficanalyzer.in/blog/swipable-navigation-tabs-using-actionbarcompat-library/

Ответ №2:

Наконец, я решил свои проблемы. Только из-за моей ошибки при настройке представления для вкладок. Я расширил неправильную тему:

 <style name="ActionBarTabStyle" parent="@android:Widget.ActionBar.TabView">
  

вместо:

 <style name="ActionBarTabStyle" parent="@style/Widget.AppCompat.ActionBar.TabView">
  

Спасибо всем за поддержку!