type layoutcontainer findview failed extensions experimental activity_main android android-listview android-fragments nullpointerexception findviewbyid

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