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.
- ¿Por qué Android Studio me dice que utilice getSupportActionBar () en lugar de getActionBar ()?
- Creación de un proyecto Android Jar del proyecto Uso de gradle con dependencias
- Error: Causa: buildToolsVersion no se especifica
- Prueba ortográfica android studio / IntelliJ Idea
- Android Studio está atascado en gradle resolver dependencias
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>
- Android Studio "no puede resolver el símbolo Cadena"
- Cómo perfil "código nativo" en android
- Android Studio, diseño vacío
- Android Studio entra en la fuente incorrecta de sdk
- "No hay suficiente almacenamiento disponible para procesar este comando" - Gradle con complemento de Android
- Android studio sigue reemplazando match_parent con un valor de dp fijo
- ¿Faltan errores en el archivo de caché?
- No se pudo resolver: com.google.firebase: firebase-database: 10.2.0
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.
- ¿Hay una función en Android análoga a "int main" en C / C ++ que contiene el bucle principal del programa?
- Cordova android build falla inmediatamente