studio programacion personalizado multiple hermosa activities java android actionbarsherlock flags android-gesture

java - programacion - ActionN''s onNavigationItemSelected(posición int, itemId largo) no se activa después de deslizar horizontalmente en Gingerbread



navigation drawer personalizado (3)

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

En el menú desplegable, tengo 2 artículos. Estos se seleccionan cada vez que se recarga la actividad o después de pulsar las pestañas.

Pero, si se realiza el deslizamiento para seleccionar otra pestaña, entonces OnNavigationItemSelected (int position, long itemId) no se activará en la versión Gingerbread :( 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.

A continuación se muestra 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 hacer esto

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

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

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 tu fragmento Usa 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)); } }