我正在编写一个包含两个活动的基本应用程序。两者都包含显示标题的TextView,第一个包含EditText,其中用户键入消息并单击其侧面的按钮,第二个活动将启动,显示用户键入的消息。
它有以下问题:
1.当我点击按钮时,应用程序停止说“不幸写入显示并停止。”,而不是启动第二个活动。
可以在此处找到Logcat: enter link description here,因为将其添加到问题超出限制。
第一项活动的代码: -
package com.practice.myfirstapp1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
//import android.view.Menu;
public class MainActivity extends Activity {
public static final String key_name="com.practice.firstApp.key";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendMessage(View view){
Intent intent= new Intent(this, SecondActivity.class);
EditText editText=(EditText) findViewById(R.id.EditText1_MainActivity);
String key_value= editText.getText().toString();
intent.putExtra(key_name, key_value);
startActivity(intent);
}
}
第一次活动的布局: -
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/TextView1_MainActivity"
android:layout_alignParentTop="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/title_MainActivity"
android:textStyle="bold"/>
<EditText
android:id="@+id/EditText1_MainActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/TextView1_MainActivity"
android:hint="@string/EditText_MainActivity"
android:textStyle="italic" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/TextView1_MainActivity"
android:layout_toRightOf="@id/EditText1_MainActivity"
android:text="@string/Button_MainActivity"
android:onClick="sendMessage"/>
</RelativeLayout>
第二项活动守则: -
package com.practice.myfirstapp1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent= getIntent();
String intent_value= intent.getStringExtra(MainActivity.key_name);
TextView textView= new TextView(this);
textView= (TextView) findViewById(R.id.TextView2_SecondActivity);
textView.setText(intent_value);
}
}
第二次活动的布局: -
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="horizontal"
tools:context=".SecondActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/title_SecondActivity"
android:textStyle="bold"/>
<TextView
android:id="@+id/TextView2_SecondActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
STRINGS RESOURCE FILE: -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Write n Display</string>
<string name="action_settings">Settings</string>
<string name="title_MainActivity">WRITE</string>
<string name="EditText_MainActivity">Your Message here</string>
<string name="Button_MainActivity">Send</string>
<string name="title_SecondActivity">DISPLAY</string>
</resources>
ANDROID MANIFEST FILE: -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.practice.myfirstapp1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:debuggable="true" >
<activity
android:name="com.practice.myfirstapp1.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.practive.myfirstapp1.SecondActivity"
android:label="@string/app_name">
</activity>
</application>
</manifest>
答案 0 :(得分:1)
要解决您的第一个问题:将以下代码放在两个xml文件的textview中。
原因:您没有将android:layout_centerHorizontal="true"
放入TextView
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/title_MainActivity"
解决您的第二个问题:更改第一项活动的布局:
原因:android:layout_width为“0dp”。它应该是wrap_content或fill_parent或match_parent
<EditText
android:id="@+id/EditText1_MainActivity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/TextView1_MainActivity"
android:hint="@string/EditText_MainActivity"
android:textStyle="italic" />
要:
<EditText
android:id="@+id/EditText1_MainActivity"
android:layout_width="wrap_content" //you can put, fill_parent or match_parent
android:layout_height="wrap_content"
android:layout_below="@+id/TextView1_MainActivity"
android:hint="@string/EditText_MainActivity"
android:textStyle="italic" />
解决您的第三个问题:更改您的第一个活动代码: -
原因:您已将editText =(EditText)设为findViewById(R.id.EditText1_MainActivity);在sendMessage(视图视图)中。发送消息包含View
因此,无论何时启动此方法中的任何组件,它都将在此特定视图上搜索该组件,该组件不正确。您可以在任何不包含任何视图参数的方法中启动组件。如果要在特定视图中启动任何组件,则必须启动它,如editText =(EditText)view.findViewById(R.id.EditText1_MainActivity);.但在您的情况下,edittext位于主视图中,因此您需要将其从sendMessage(View视图)中删除。
public class MainActivity extends Activity {
public static final String key_name="com.practice.firstApp.key";
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText) findViewById(R.id.EditText1_MainActivity);
}
public void sendMessage(View view){
Intent intent= new Intent(this, SecondActivity.class);
String key_value= editText.getText().toString();
intent.putExtra(key_name, key_value);
startActivity(intent);
}
}
更改您的第二个活动
原因:TextView textView = new TextView(this);是初始化xml视图的任何组件的正确方法。
TextView textView= new TextView(this);
textView= (TextView) findViewById(R.id.TextView2_SecondActivity);
textView.setText(intent_value);
要:
TextView textView;
textView= (TextView) findViewById(R.id.TextView2_SecondActivity);
textView.setText(intent_value);
答案 1 :(得分:1)
你可以像这样解决你的问题
1.replace
android:gravity="center_horizontal"
的{p> android:layout_gravity="center_horizontal"
。
2.为第一个活动xml
的edittext提供layout_width为wrap_content
3.将您的sendMessage
方法公开为非私有
获取logcat在Eclipse中,Goto Window-&gt;显示视图 - &gt;其他 - &gt; Android-&GT; logcat中。
或强>
在日食窗口(右上角,就在Open Prospective按钮之前)的LogCat
编辑框中写Quick Access
。只需选择LogCat,它将打开当前prospec
答案 2 :(得分:0)
将private void sendMessage(View view)
更改为public void sendMessage(View view)
(私人对公众)
第一次活动的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical" >
<TextView
android:id="@+id/TextView1_MainActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+string/title_MainActivity"
android:textStyle="bold"/>
<EditText
android:id="@+id/EditText1_MainActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/EditText_MainActivity"
android:textStyle="italic" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Button_MainActivity"
android:onClick="sendMessage"/>
第二次活动的布局: -
<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:orientation="horizontal"
android:gravity="center_vertical"
tools:context=".SecondActivity">
<TextView
android:layout_alignParentTop="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+string/title_SecondActivity"
android:textStyle="bold"/>
<TextView
android:id="@+id/TextView2_SecondActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
答案 3 :(得分:0)
Logcat显示以下内容:
引起:android.content.ActivityNotFoundException:无法找到 显性活动类 {com.practice.myfirstapp1 / com.practice.myfirstapp1.SecondActivity}; 你有没有在AndroidManifest.xml中声明这个活动?
你确实在manifest中定义了SecondActivity,但包名是错误的( android:name =“com.practive.myfirstapp1.SecondActivity”应该是ndroid:name =“com.practice.myfirstapp1.SecondActivity” )。
<activity
android:name="com.practice.myfirstapp1.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.practive.myfirstapp1.SecondActivity"
android:label="@string/app_name">
</activity>
应该是
<activity
android:name="com.practice.myfirstapp1.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.practice.myfirstapp1.SecondActivity"
android:label="@string/app_name">
</activity>