OnNavigationItemSelected de la barra de acciones (int position, long itemId) no se dispara después de deslizar horizontalmente en Gingerbread

He implementado la vista de pestañas, así como la vista de desplazamiento horizontal (para cambiar las pestañas) con el modo de navegación como listas para la aplicación. Estoy utilizando ActionBarSherlock & TabPageIndicator. Utilicé fragmentos para recargar el contenido después de cambiar las pestañas.

En el hilandero desplegable, tengo 2 artículos. Estos se están seleccionando cada vez que la actividad se recarga o después de pulsar en Tabs.

Sin embargo, si se hace swipe para seleccionar otra pestaña, entonces onNavigationItemSelected (int position, long itemId) no se dispara en Gingerbread versión 🙁 Lo hemos probado en Gingerbread 2.3.6, 2.3.3.

En logcat , recibí este mensaje de warning "View:onTouchEvent:ViewFlags" is DISABLED

Pero, funciona perfectamente bien en ICS, Froyo, etc.

Su ayuda sería muy apreciada.

Siguiente es el fragmento de código:

 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); } } 

Intenta hacerlo

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

Y utilizar la biblioteca de soporte en su lugar.

Por lo que recuerdo hubo algunos problemas con la actualización de la lista de navegación después de deslizar (en ABS). Esto es lo que hice para resolver este problema y funciona con Android 2.3.7 (ABS), así como con Android 4.0 (AB nativo).

 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(); } }); 

Internamente, vuelve a seleccionar la página – eso no es tan agradable – sin embargo esa fue la única solución que encontré.

Aclamaciones

Utilice este código ..

Dentro de su fragmento Utilice este código.

 @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)); } } 
  • ¿El Apache DefaultHttpClient (Android) y NSURLConnection (iOS) vuelven a intentar las conexiones fallidas con versiones de protocolo anteriores?
  • Pasar de una actividad a otra
  • Barra de pestañas de diapositivas como en Android Market
  • Pantalla de presentación de Android durante la carga
  • Los recursos referenciados desde el manifiesto no pueden variar según la configuración
  • Uso de la API de host USB de Android para leer mi controlador de juego USB u otros datos de dispositivo USB
  • Solicitud httpget con auth
  • Android: reconstruir ahora requiere nivel de cumplimiento del compilador 5.0 o 6.0. Se encontró '1.7' en su lugar. ¿Por qué eliminar de @Override?
  • "Tag <Activity> nombre de atributo tiene un carácter no válido". "Android Mainfest
  • Android NDK, mantener objetos C ++ en directo
  • ¿Puedo almacenar archivos de imagen en firebase usando la API de Java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.