android - findview - layoutcontainer kotlin
getActivity(). findViewById(R.layout.contacts_list_view) devuelve null (5)
reemplazar
mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);
a
mContactsList = (ListView) getView().findViewById(R.id.list);
contact_list_view.xml shoud be change de la siguiente manera
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="**@+id/list**"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
He visto una pregunta similar sobre esto, pero fue por diferentes razones (creo). El código que estoy usando está tomado de http://developer.android.com/training . Estoy intentando crear una aplicación de contactos simple de acuerdo con el tutorial: http://developer.android.com/training/contacts-provider/retrieve-names.html La parte donde obtengo el error es Configurar el CursorAdapter para el ListView . Este es mi código:
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);
mCursorAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.contacts_list_item, null, FROM_COLUMNS, TO_COLUMN, 0);
mContactsList.setAdapter(mCursorAdapter);
mContactsList.setOnItemClickListener(this);
getLoaderManager().initLoader(0, null, this);
}
Todos los archivos XML se han puesto en su lugar:
contact_list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"/>
contact_list_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Mi actividad principal consiste en 2 FrameLayout
para FrameLayout
los fragmentos. Este es su XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/frag_contacts"
android:layout_width="match_parent"
android:layout_height="200dp"
android:textColor="#0a20a3" >
</FrameLayout>
<FrameLayout
android:id="@+id/frag_contact_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#045011" />
</LinearLayout>
Esta es la onCreate
de la actividad:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ninth);
if (findViewById(R.id.frag_contacts) != null)
{
if (savedInstanceState != null)
return;
ContactsFragment contactsFrag = new ContactsFragment();
getFragmentManager().beginTransaction().add(R.id.frag_contacts, contactsFrag).commit();
}
}
también, esta es la onCreateView
del fragmento:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.contacts_list_view, container, false);
}
Ahora, perdón por la publicación larga, parte de esto puede ser innecesario, pero el problema es que en el primer fragmento de getActivity().findViewById(R.layout.contacts_list_view)
, getActivity().findViewById(R.layout.contacts_list_view)
devuelve null todo el tiempo! No sé qué más hacer. ¿De qué otra forma puedo cargar datos en la lista, y qué está mal aquí? ¡Gracias por adelantado!
Cambia esto
mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);
a
mContactsList = (ListView) getView().findViewById(R.id.contacts_list_view);
Editar:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+idlist"
Y
mContactsList = (ListView) getView().findViewById(R.id.list);
Tienes que esperar hasta que el Fragment
esté unido a la Activity
. Puedes hacer eso en onAttach(Activity)
en tu clase de Fragment
tienes que cambiar
mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);
con
mContactsList = (ListView) getView().findViewById(R.id.contacts_list_view);
Dado que ListView pertenece a la Vista, usted regresa dentro deCreateView.
Si está intentando hacer getActivity (). FindViewById (R.id.contacts_list_view) en onCreateView, devolverá nulo, porque la vista de Fragment aún no se ha creado. Intenta hacer eso en onResume y devolverá la vista:
@Override
public void onResume() {
super.onResume();
mContactsList = (ListView) getActivity().findViewById(R.id.contacts_list_view);
}