Botón button = findViewById (R.id.button) siempre resuelve null en Android Studio

Soy nuevo en el desarrollo de Android y Android Studio, así que perdón mi ignorancia.

findViewById de un botón que agregué siempre resuelve a null . Por lo tanto, si intento setonClickListener falla toda la actividad.

Actividad principal:

 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()) .commit(); } Button buttonClick = (Button) findViewById(R.id.button); buttonClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onButtonClick((Button) view); } }); } public void onButtonClick(Button view) { TextView textHello = (TextView) findViewById(R.id.textView); textHello.setText("Clicked !!!"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } } 

Activity_main.xml

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.pluralsight.activitylifecycle.MainActivity" tools:ignore="MergeRootFrame" /> 

Fragment_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.pluralsight.activitylifecycle.MainActivity$PlaceholderFragment"> <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttonClick" android:id="@+id/button" android:layout_below="@+id/textView" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginRight="54dp" /> </RelativeLayout> 

Esto se debe a que findViewById() busca en la disposición activity_main , mientras que el botón se encuentra en el fragmento fragment_main del fragment_main .

Mover ese pedazo de código en el método onCreateView() del fragmento:

 //... View rootView = inflater.inflate(R.layout.fragment_main, container, false); Button buttonClick = (Button)rootView.findViewById(R.id.button); buttonClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onButtonClick((Button) view); } }); 

Tenga en cuenta que ahora se accede a través de la vista rootView :

 Button buttonClick = (Button)rootView.findViewById(R.id.button); 

De lo contrario obtendría de nuevo NullPointerException.

El código de botón debe moverse a la clase PlaceholderFragment() . Allí llamará a la disposición fragment_main.xml en el método onCreateView . Al igual que

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main, container, false); Button buttonClick = (Button) view.findViewById(R.id.button); buttonClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onButtonClick((Button) view); } }); return view; } 

R.id.button no es parte de R.layout.activity_main . ¿Cómo debe encontrar la actividad en la vista de contenido?

El diseño que contiene el botón se muestra en el fragmento, por lo que tiene que obtener el botón allí, en el fragmento.

  • Cómo borrar la lista de proyectos recientes en Android Studio?
  • Cómo activar la ofuscación de ProGuard en Android Studio?
  • "SDK de Android carpeta dentro de la carpeta de la aplicación" Al actualizar el estudio de Android
  • Cómo cambiar el nombre del paquete en android studio?
  • Error al recuperar el padre del elemento - Android Studio
  • Android studio "Use gradle wrapper" en gris
  • Estoy recibiendo error extraño en el estudio de Android
  • Estudio de Android cuando agrego un módulo de Java en la aplicación que va a estar equivocado
  • ¿Es posible asignar una tecla de acceso rápido para cambiar entre la actividad y el diseño XML en Android Studio?
  • Android Studio - Cómo agregar una definición de tamaño de pantalla
  • ImageView carga la imagen de alta resolución como muy mala calidad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.