Подтвердить что ты не робот

Actionbar onNavigationItemSelected (int position, long itemId) не запускается после горизонтального прокрутки в Gingerbread

Я реализовал представление "Таб", а также "Горизонтальное представление" (для изменения вкладок) с режимом навигации в виде списков для приложения. Я использую ActionBarSherlock и TabPageIndicator. Я использовал фрагменты для перезагрузки содержимого после изменения вкладок.

В опускающемся спиннере у меня есть 2 предмета. Они выбираются, когда активность перезагружается или после нажатия на вкладки.

Но если для выбора другой вкладки выполняется салфетка, то onNavigationItemSelected (int position, long itemId) не будет запускаться в версии Gingerbread:( Мы протестировали ее на Gingerbread 2.3.6, 2.3.3.

В logcat, я получил это сообщение warning "View:onTouchEvent:ViewFlags" is DISABLED

Но он отлично работает на ICS, Froyo и т.д.

Ваша помощь будет принята с благодарностью.

Ниже приведен фрагмент кода:

public class MainPageActivity extends SherlockFragmentActivity implements
        ActionBar.OnNavigationListener {

    MenuItem menuItem;
    EditText searchText;
    public static Context mContext;
    public static DataAdapter dataAdapter;
    ArrayList<String> accountList;
    public static List<View> currentViewBeingChanged = new ArrayList<View>();

    public static LayoutInflater layoutInflater;
    public static String checktab = "running", nameComp;
    int isRefresh;
    public static boolean isAutoRefresh = true;
    public static ArrayList<String> listItems;
    public static boolean check;
    public static boolean isAtleastOnce = true, listToBeRefreshed = false;
    public static ActionBar actionBar;
    public static int itemPosition, listPosition;
    public static FragmentManager fragmentManager;
    InputMethodManager imm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        mContext = this;

        layoutInflater = getLayoutInflater();

        fragmentManager = getSupportFragmentManager();

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);

        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

        Context context = getSupportActionBar().getThemedContext();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
                android.R.layout.simple_spinner_dropdown_item);
        adapter.clear();
        for (int i = 0; i < ManageAccountLists.accountList.size(); i++) {
            adapter.add(ManageAccountLists.accountList.get(i));
        }

        actionBar.setListNavigationCallbacks(adapter, this);

        tabPagerFunction();

    }

    public void tabPagerFunction() {

        FragmentPagerAdapter adapter = new GoogleMusicAdapter(
                getSupportFragmentManager());
        adapter.notifyDataSetChanged();

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);

        checktab = "running";

        final TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(pager);

        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {

                System.out.println("Tab selected..................");

                if (arg0 == 0) {

                    // Running tab is selected
                    indicator.setCurrentItem(arg0);

                    checktab = "running";
                    RunningInstancesActivity runningInstancesActivity = new RunningInstancesActivity();
                    runningInstancesActivity.callThread();

                } else {

                    // Stopped tab is selected
                    indicator.setCurrentItem(arg0);
                    checktab = "stopped";
                    StoppedInstancesActivity stoppedInstancesActivity = new StoppedInstancesActivity();
                    stoppedInstancesActivity.callThread();
                    InstanceStatusUpdate.isOnPostExecute = false;

                }

            }

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

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });

    }

    class GoogleMusicAdapter extends FragmentPagerAdapter {

        private final String[] CONTENT = new String[] { "Running", "Stopped" };

        public GoogleMusicAdapter(FragmentManager fm) {
            super(fm);
            notifyDataSetChanged();

        }

        @Override
        public Fragment getItem(int position) {

            switch (position) {
            /** Running tab is selected */
            case 0:
                checktab = "stopped";
                return RunningInstancesActivity.newInstance(0);

                /** Stopped tab is selected */
            case 1:

                checktab = "running";
                return StoppedInstancesActivity.newInstance(1);
            }
            return null;

        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position % CONTENT.length].toUpperCase();
        }

        public CharSequence getPageTitle(int position, int number) {
            return CONTENT[position % CONTENT.length].toUpperCase();
        }

        @Override
        public int getCount() {
            return CONTENT.length;
        }
    }

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {

             System.out.println("Navigation item selected");

        // Performs fetching
    }



    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        System.out.println("Dispatch touvh event..");

        return super.dispatchTouchEvent(ev);

    }

}
4b9b3361

Ответ 1

Попробуйте сделать это

dependencies {

compile "com.android.support:appcompat-v7:18.0.+"
}

и вместо этого используйте библиотеку поддержки.

Ответ 2

Насколько я помню, были некоторые проблемы с обновлением списка навигации после прокрутки (в АБС). Это то, что я сделал для решения этой проблемы, и работает с Android 2.3.7 (ABS), а также с Android 4.0 (родной AB).

pager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageScrollStateChanged(int state) {
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        if (navigatioBarIsUsed) actionBar.setSelectedNavigationItem(position);
        if (tabsAreUsed) actionBar.getTabAt(position).select();
    }
});

Внутри он повторно выбирает страницу - это не так приятно - однако это единственное решение, которое я нашел.

Приветствия

Ответ 3

Используйте этот код..

Внутри фрагмента Используйте этот код.

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        // TODO Auto-generated method stub
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            Activity activity = getActivity();
            ActionBar actionBar = ((ActionBarActivity) activity)
                    .getSupportActionBar();
            actionBar.setIcon(getResources().getDrawable(R.drawable.nearby));


        }
    }