No se ha encontrado ninguna vista para id en Android FragmentActivity con ListFragment
Estoy intentando crear un ListView personalizado. Cuando pruebo mi código, recibo el error siguiente
03-09 19:21:10.425: E/AndroidRuntime(379): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anomaly.punchlist/com.anomaly.punchlist.TeamActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f08000c for fragment TeamListFragment{4067a358 #0 id=0x7f08000c}
He hecho referencia a los siguientes enlaces antes de publicar esta pregunta, además de leer los documentos de Android en Fragmentos, ListFragments y ListViews.
- Lista de contactos con contacto La foto crea problemas de rendimiento
- Cajón de navegación Cambia el fondo mientras se desplaza
- Cómo hacer que el encabezado o pie de página de un ListView no se puede hacer clic
- Obtener datos de JSON en la vista de lista
- Usar las mismas vistas varias veces en un diseño
Enlace 1: FragmentActivity onCreateView
Enlace 2: Problema con ListFragment en Android
Link 3: Android Fragment no se encontró ninguna vista para ID?
Enlace 4: Android ListFragment es confuso
Enlace 5: ¿Cómo actualizar ListView en ListFragment de FragmentActivity?
Enlace 6: ¿ Rellenar ListFragments con una vista personalizada?
Tengo la clase TeamActivity que extiende FragmentActivity y TeamListFragment que extiende ListFragment e implementa LoaderManager.LoaderCallbacks. Por favor vea el código abajo:
TeamActivity.java
package com.anomaly.punchlist; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; public class TeamActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); TeamListFragment teamListFragment = new TeamListFragment(); fragmentTransaction.add(R.id.android_teamList, teamListFragment); fragmentTransaction.commit(); } }
TeamListFragment.java
package com.anomaly.punchlist; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import com.anomaly.punchlist.contentprovider.basecolumns.TeamBaseColumns.Team; import com.j256.ormlite.logger.Logger; import com.j256.ormlite.logger.LoggerFactory; public class TeamListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private static Logger logger = LoggerFactory.getLogger(TeamListFragment.class); private ListView listView; private SimpleCursorAdapter adapter; private static final int TEAM_LOADER_ACTIVITY = 0x01; private static final String[] PROJECTION = new String[] { "project_manager_id", "contact_id", "project_id" }; private static String SELECTION = "contact_id = ? AND project_id = ?"; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); int[] uiBindTo = { R.id.text1 }; getLoaderManager().initLoader(TEAM_LOADER_ACTIVITY, null, this); adapter = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.team, null, null, uiBindTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); } catch (Exception e) { logger.error(e.getMessage()); new RuntimeException("RuntimeException occurred in onCreate() method of TeamActivity." + e); } } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle bundle) { String contactId = new String(); String projectId = new String(); CursorLoader cursorLoader = null; if (bundle != null) { contactId = bundle.getString("contact_id"); projectId = bundle.getString("project_id"); } String[] selectionArgs = { contactId + ", " + projectId }; cursorLoader = new CursorLoader(getActivity(), Team.CONTENT_URI, PROJECTION, SELECTION, null, null); return cursorLoader; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { adapter.swapCursor(cursor); setListShown(true); } @Override public void onLoaderReset(Loader<Cursor> cursor) { adapter.swapCursor(null); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { onCreate(savedInstanceState); View teamView = inflater.inflate(R.layout.team, container, false); return teamView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { listView = getListView(); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); setListAdapter(adapter); setListShown(true); } }
Además del código anterior, tengo el siguiente diseño personalizado.
team.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="8dp" android:paddingRight="8dp" > <ListView android:id="@+id/android:teamList" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@color/grey2" android:divider="@color/blue2" android:dividerHeight="1dp" android:drawSelectorOnTop="false" /> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="No data" /> </LinearLayout>
- Espacio vacío entre el encabezado listview y el primer elemento
- Android: clics retardados en ListView
- Cómo deshabilitar el elemento de lista particular en la lista de vista en android?
- Asignar valores ocultos a un elemento de vista de lista
- Android: Cómo utilizar la lista de arrays de cadenas dentro de la fila de lista
- ¿Cómo hacer divisor parte de cada elemento en listview en android?
- Cómo extraer objetos de ListView - getItemAtPosition no funcionará
- Acceder a objetos personalizados en una vista de lista
En el método onCreate()
de su actividad, utilice el método setContentView(R.layout.activity)
y también defina un archivo de diseño, que contiene un FrameLayout
dentro de LinearLayout
.
Ahora invoca el método add()
con el id de FrameLayout que acabas de agregar en lugar de R.id.android_teamList
que usas en tu onCreate()
y también reemplaza android:id="@+id/android:teamList"
con android:id="@android:id/list"
en su archivo de diseño team.xml.
Por cierto, en caso de que lo haga, puede acceder a su ListView con android.R.id.list
.
R.id.text1
debe definirse en R.layout.team
.
Compruebe el documento SimpleCursorAdapter :
Identificador de recurso de un archivo de diseño que define las vistas de este elemento de lista. El archivo de diseño debe incluir al menos aquellas vistas con nombre definidas en "to"
- Compruebe si la hora actual es más de una hora desde el tiempo "last_updated"
- ¿Cómo implementar una mesa con esquinas redondas?