Cajón de navegación OnItemClickListener
Estoy haciendo una aplicación del ejemplo de desarrolladores de Android con el cajón de navegación. Hice los artículos pero no sé cómo puedo abrir la nueva actividad de cada uno de los artículos alistados.
Esta es la principalActividad:
- Acceder a objetos personalizados en una vista de lista
- OnClickListener no funciona en fragmento
- Invocar una llamada de escucha programáticamente en android
- Agregar un oyente a un botón dentro de un alerta de alerta personalizado bloquea mi aplicación
- ¿Cómo funciona finish () en el evento OnClick?
public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mGalaxyTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mGalaxyTitles = getResources().getStringArray(R.array.Galaxys_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mGalaxyTitles)); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { selectItem(0); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch(item.getItemId()) { case R.id.action_websearch: Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, getActionBar().getTitle()); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show(); } return true; default: return super.onOptionsItemSelected(item); } } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch(position) { case 1: Intent a = new Intent(MainActivity.this, Page1.class); startActivity(a); break; case 2: Intent b = new Intent(MainActivity.this, Page2.class); startActivity(b); break; default: } } private void selectItem(int position) { Fragment fragment = new GalaxyFragment(); Bundle args = new Bundle(); args.putInt(GalaxyFragment.ARG_Galaxy_NUMBER, position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); setTitle(mGalaxyTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } public static class GalaxyFragment extends Fragment { public static final String ARG_Galaxy_NUMBER = "Galaxy_number"; public GalaxyFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_Galaxy, container, false); int i = getArguments().getInt(ARG_Galaxy_NUMBER); String Galaxy = getResources().getStringArray(R.array.Galaxys_array)[i]; int imageId = getResources().getIdentifier(Galaxy.toLowerCase(Locale.getDefault()), "drawable", getActivity().getPackageName()); ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId); getActivity().setTitle(Galaxy); return rootView; } } }
Y una lista de cajones.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:textIsSelectable="false" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:textColor="#fff" android:background="?android:attr/activatedBackgroundIndicator" android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
El clic en los elementos no llaman a otras actividades, ¿cuál es el error?
- Usando onClick en TextView con texto seleccionable - cómo evitar doble clic?
- Android AlertDialog en onClickListener obtener padre Ver
- ¿Cómo puedo tener EditText con Clickable Spannables y todavía seleccionable por longClick?
- Cómo combinar OnClickListener y OnTouchListener para un ImageButton
- OnClickListener para CardView?
- SetOnPageChangeListener no llama aPageSelected
- ¿Cómo puedo abrir un nuevo fragmento de otro fragmento
- Cómo desmarcar un elemento en gridview en segundo clic en android?
En lugar de su código:
private void selectItem(int position) { Fragment fragment = new GalaxyFragment(); Bundle args = new Bundle(); args.putInt(GalaxyFragment.ARG_Galaxy_NUMBER, position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); setTitle(mGalaxyTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); }
Utilice este código:
private void selectItem(int position) { switch(position) { case 1: Intent a = new Intent(MainActivity.this, Activity1.class); startActivity(a); break; case 2: Intent b = new Intent(MainActivity.this, Activity2.class); startActivity(b); break; default: } }
Y quitar esta parte: (No es necesario)
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch(position) { case 1: Intent a = new Intent(MainActivity.this, Page1.class); startActivity(a); break; case 2: Intent b = new Intent(MainActivity.this, Page2.class); startActivity(b); break; default: } }
En lugar de utilizar las actividades sólo utilizar un fragmento y un gestor de fragmentos para la transición entre ellos
switch(position) { case 1: Intent a = new Intent(Book.this, SecondActivity.class); startActivity(a); break; case 2: Intent b = new Intent(Book.this, ThirdActivity.class); startActivity(b); break; default: }
En manifesto escribes este código:
<activity android:name=".firstactivity" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> </activity>
Actividad principal:
Intent i=new Intent(MainActivity.this,firstactivity.class); startActivity(i);