Fragmento de Android y referencia de objeto nulo
Estoy tratando de conseguir mi trabajo fragmento y no puedo hacer lo que estoy tratando de hacer.
El error que estoy recibiendo es:
- Bitmap crear fuera de la memoria
- Retrofit Cómo imprimir la respuesta JSON
- SparseArray, compruebe si existe clave
- SharedPreferences no se guardará si la aplicación se vuelve a abrir
- Android - ¿Cómo es posible que un servicio siga funcionando después de que la Actividad haya sido cerrada?
Java.lang.NullPointerException: Intenta invocar el método virtual 'void android.widget.TextView.setText (java.lang.CharSequence)' en una referencia de objeto nulo
Aquí está el código:
public class FragmentOne extends Fragment { private TextView one; public FragmentOne() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); one = (TextView) getActivity().findViewById(R.id.one); // Displaying the user details on the screen one.setText("kjhbguhjg"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment1, container, false); } }
No tengo ni idea de por qué no funciona. Estoy probando esta clase sólo para ver si el texto se cambiará en el textview. Estoy usando la identificación correcta porque he comprobado que como 10 veces, pero creo que el problema es porque textview uno es un objeto nulo. ¿Pero por qué no encuentra el id?
- Proyecto LibGDX escrito en Scala, en Android, con IntelliJ
- ¿Cómo instalar manualmente las librerías java y mantener / tmp como noexec?
- Caso de interés en multithreading con int volátil
- GetContentResolver () y getWindow () en un DialogFragment
- Android: cambiar los elementos del menú de opciones mediante programación
- Ancho desplegable de Autocompletar de TextView de Android
- Cómo imprimir local timezone en formato posix en java (android)?
- ¿Cómo puedo crear un módulo de prueba de Android en IntelliJ 13 para un proyecto Android de Gradle?
onCreate()
se llama antes de onCreateView()
y por lo tanto no podrá acceder a ella en onCreate()
.
Solución: Mover
one = (TextView) getActivity().findViewById(R.id.one);
A onViewCreated()
lugar.
Vea la imagen a continuación para obtener una visión general del ciclo de vida de los fragmentos .
El nuevo fragmento se ve así:
public class FragmentOne extends Fragment { private TextView one; public FragmentOne() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment1, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState){ one = (TextView) getActivity().findViewById(R.id.one); // Displaying the user details on the screen one.setText("kjhbguhjg"); } }
O. En lugar de volver a escribir
public void onViewCreated(View view, Bundle savedInstanceState)
Puede cambiar ligeramente su onCreateView por lo que parece
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment1, container, false) one = (TextView) rootView.findViewById(R.id.one) return rootView; }