android - toques - Mi primera aplicación se bloquea al presionar un botón
encender android sin boton (1)
Intenté numerosas veces hacer que la aplicación del Tutorial MyFirstApp en developers.android ( https://developer.android.com/training/basics/firstapp/index.html ) funcionara. Estoy probando mi código en un dispositivo Nexus 4 con Stock Android 4.4.2
Mi + problema es que la aplicación falla cada vez que presiono el botón de enviar y se inicia DisplayMessageActivity. La causa más común de un bloqueo de esta aplicación tutorial es que DisplayMessageActivity no se incluyó en el archivo de Manifiesto de Android, pero está definitivamente incluido en el mío. No tengo idea de qué causa este bloqueo, así que aquí está mi código completo, incluido Logcat.
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myfirstapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
MainActivity.java
package com.example.myfirstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@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();
}
}
@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;
}
}
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.enter_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE,message);
startActivity(intent);
}
}
DisplayMessageActivity.java
package com.example.myfirstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class DisplayMessageActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
setContentView(textView);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.display_message, 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_display_message,
container, false);
return rootView;
}
}
}
activity_main.xml
<LinearLayout 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"
android:orientation="horizontal"
tools:context="com.example.myfirstapp.MainActivity"
tools:ignore="MergeRootFrame" >
<EditText
android:id="@+id/enter_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/enter_message"/>
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"/>
</LinearLayout>
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myfirstapp.MainActivity$PlaceholderFragment" >
</RelativeLayout>
activity_display_message.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.example.myfirstapp.DisplayMessageActivity"
tools:ignore="MergeRootFrame" />
fragment_display_message.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myfirstapp.DisplayMessageActivity$PlaceholderFragment" >
</RelativeLayout>
LogCat
03-18 15:27:35.195: E/AndroidRuntime(12382): FATAL EXCEPTION: main
03-18 15:27:35.195: E/AndroidRuntime(12382): Process: com.example.myfirstapp, PID: 12382
03-18 15:27:35.195: E/AndroidRuntime(12382): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.DisplayMessageActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f05003c (com.example.myfirstapp:id/container) for fragment PlaceholderFragment{41e7f580 #0 id=0x7f05003c}
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.os.Handler.dispatchMessage(Handler.java:102)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.os.Looper.loop(Looper.java:136)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-18 15:27:35.195: E/AndroidRuntime(12382): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 15:27:35.195: E/AndroidRuntime(12382): at java.lang.reflect.Method.invoke(Method.java:515)
03-18 15:27:35.195: E/AndroidRuntime(12382): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-18 15:27:35.195: E/AndroidRuntime(12382): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-18 15:27:35.195: E/AndroidRuntime(12382): at dalvik.system.NativeStart.main(Native Method)
03-18 15:27:35.195: E/AndroidRuntime(12382): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f05003c (com.example.myfirstapp:id/container) for fragment PlaceholderFragment{41e7f580 #0 id=0x7f05003c}
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.Activity.performStart(Activity.java:5241)
03-18 15:27:35.195: E/AndroidRuntime(12382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
03-18 15:27:35.195: E/AndroidRuntime(12382): ... 11 more
Sería genial si alguien pudiera detectar el error que causa el bloqueo y podría ayudarme con EditText. Muchas gracias por adelantado.
su problema está aquí ( DisplayMessageActivity
):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
setContentView(textView);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
Está intentando agregar el Fragment
a R.id.container
que no forma parte de la jerarquía de vistas de la Activity''
, ya que lo único que contiene es una TextView