SecondActivity 不可见 - 未使用 AppCompatActivity
SecondActivity is not visible - not using AppCompatActivity
在学习了 youtube 如何更改布局,如何将 Buttons、EditText、TextViews 放在 MainActivity 之后,我尝试了最简单的启动新方式的方法 activity。
当我 运行 activity 时,我看到带有文本“打开 activity 2”的按钮。我可以点击它。并且......没有任何反应。
我应该能够使用 TextView = "Activity 2" 查看 activity_second 的布局。
相反,我可以一直点击按钮,但看不到“Activity 2”
在这个网站上我了解到问题可能出在意图上,所以我改变了: Intent intent = new Intent(this, SecondActivity.class) by Intent intent = new Intent (MainActivity.this, SecondActivity.class ) 我什至想过使用 getBaseContext 来代替,但还没有完成。
我相信问题可能是我们需要在 SecondActivity.java 中以某种方式调用 TextView
理论上,调用布局 activity_second.xml 应该足够了,因为它会出现 android:text="Activity 2"
另一个可疑之处是我没有使用 Android Studio,也没有使用 AppCompatActivity,而是从使用它们的页面复制我的代码。相反,我只使用 MainActivity extends Activity
也许我被监督了一些事情,比如投射小部件或类似的东西。
我的问题是你看到某种类型了吗?
我已经克服了一些“找不到符号”,比如我的 id 中的拼写错误,编译器找不到,或者忘记导入一些小部件或用逗号代替点。
我使用 emacs 作为编辑器并使用这个慷慨的博客编译代码。我已经安装了 openjdk、javac 和基本 android 工具
我最大程度地简化了代码,使用 https://developer.android.com/training/basics/firstapp/starting-activity 和流中频道代码的 youtube 作为基础。
这是我的代码,错字在哪里?
p.S:我是第一次post,代码格式似乎不正确,希望你能看懂。
MainActivity.java
package net.otro.abrir1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.util.Log;
import android.widget.TextView;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
openActivity2();
}
});
}
/** Called when the user taps the Send button */
public void openActivity2(){
// Do something in response to button
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
SecondActivity.java
package net.otro.abrir1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.view.View;
import android.widget.EditText;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="open activity 2"
android:id="@+id/button"/>
</RelativeLayout>
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview"
android:text="Activity 2"/>
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="net.otro.abrir1"
versionCode="1"
versionName="0.1">
<uses-sdk android:minSdkVersion="16"/>
<application android:label="Abrir1">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity"
android:parentActivityName=".MainActivity">
<!--android:label="@string/activity2_name" -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
</manifest>
问题是:错字在哪里。答案是没有错字,但我试图用这个命令编译:
javac -source 1.7 -target 1.7 -bootclasspath "${JAVA_HOME}"/jre/lib/rt.j$ \
-classpath "${PLATFORM}/android.jar" -d build/obj \
build/gen/com/probando/intento1/R.java \
"${PROJ}"/src/com/probando/intento1/MainActivity.java
原样
javac -source 1.7 -target 1.7 -bootclasspath "${JAVA_HOME}"/jre/lib/rt.j$ \
-classpath "${PLATFORM}/android.jar" -d build/obj \
build/gen/com/probando/intento1/R.java \
"${PROJ}"/src/com/probando/intento1/*.java
我原以为 MainActivity.java 的编译足以调用 SecondActivity.java 但事实并非如此。
它必须首先编译成“R”
R.java 是一个文件,其信息与您的文件 MainActivity.java 和 SecondActivity. java,但是你可以看到内存地址,而不是变量。
评论 1:标题反映了我对 AppCompatActivity 可能是 root-cause 的怀疑,但事实并非如此。
AppCompatActivity 只是 Android 更高版本中包含的一个设置。为了使用它,您需要在 java 文件标题的导入部分中指定它
评论 2:我推荐这个网站:https://www.hanshq.net/command-line-android.html
避免使用 Android Studio。
只需 3 个文件和几行代码,您就拥有了您的第一个应用程序。稍后,您只需修改它。
Comment3:以上指南适用于 64 位和版本 25.0.0。如果你碰巧有 32 位和 19.0.0 版本,做一个小改动可能会有所帮助:
对于 64 位:
$ "${BUILD_TOOLS}/zipalign" -f -p 4 \
build/Hello.unsigned.apk build/Hello.aligned.apk
对于 32 位:
$ "${BUILD_TOOLS}/zipalign" -f 4 \
build/Hello.unsigned.apk build/Hello.aligned.apk
出于某种原因 Android 停止支持更高版本的 32 位。
您需要删除标志 -p,由于某种原因无法识别。
评论 4:感谢上面网站的作者汉斯,他为那些出于任何原因不想使用 Android Studio 的人提供了精彩的指南
就我而言,Android Studio 在 4 RAM windows 机器中 运行 太慢了,我不敢将它安装在我的 Centos 7 和 2,5 RAM 中。
对于那些负担不起的人来说,命令行确实是 Android Studio 的一个选项。
在学习了 youtube 如何更改布局,如何将 Buttons、EditText、TextViews 放在 MainActivity 之后,我尝试了最简单的启动新方式的方法 activity。 当我 运行 activity 时,我看到带有文本“打开 activity 2”的按钮。我可以点击它。并且......没有任何反应。 我应该能够使用 TextView = "Activity 2" 查看 activity_second 的布局。 相反,我可以一直点击按钮,但看不到“Activity 2” 在这个网站上我了解到问题可能出在意图上,所以我改变了: Intent intent = new Intent(this, SecondActivity.class) by Intent intent = new Intent (MainActivity.this, SecondActivity.class ) 我什至想过使用 getBaseContext 来代替,但还没有完成。 我相信问题可能是我们需要在 SecondActivity.java 中以某种方式调用 TextView 理论上,调用布局 activity_second.xml 应该足够了,因为它会出现 android:text="Activity 2" 另一个可疑之处是我没有使用 Android Studio,也没有使用 AppCompatActivity,而是从使用它们的页面复制我的代码。相反,我只使用 MainActivity extends Activity 也许我被监督了一些事情,比如投射小部件或类似的东西。 我的问题是你看到某种类型了吗? 我已经克服了一些“找不到符号”,比如我的 id 中的拼写错误,编译器找不到,或者忘记导入一些小部件或用逗号代替点。 我使用 emacs 作为编辑器并使用这个慷慨的博客编译代码。我已经安装了 openjdk、javac 和基本 android 工具 我最大程度地简化了代码,使用 https://developer.android.com/training/basics/firstapp/starting-activity 和流中频道代码的 youtube 作为基础。 这是我的代码,错字在哪里? p.S:我是第一次post,代码格式似乎不正确,希望你能看懂。
MainActivity.java
package net.otro.abrir1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.util.Log;
import android.widget.TextView;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
openActivity2();
}
});
}
/** Called when the user taps the Send button */
public void openActivity2(){
// Do something in response to button
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
SecondActivity.java
package net.otro.abrir1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.view.View;
import android.widget.EditText;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="open activity 2"
android:id="@+id/button"/>
</RelativeLayout>
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview"
android:text="Activity 2"/>
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="net.otro.abrir1"
versionCode="1"
versionName="0.1">
<uses-sdk android:minSdkVersion="16"/>
<application android:label="Abrir1">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity"
android:parentActivityName=".MainActivity">
<!--android:label="@string/activity2_name" -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
</manifest>
问题是:错字在哪里。答案是没有错字,但我试图用这个命令编译:
javac -source 1.7 -target 1.7 -bootclasspath "${JAVA_HOME}"/jre/lib/rt.j$ \
-classpath "${PLATFORM}/android.jar" -d build/obj \
build/gen/com/probando/intento1/R.java \
"${PROJ}"/src/com/probando/intento1/MainActivity.java
原样
javac -source 1.7 -target 1.7 -bootclasspath "${JAVA_HOME}"/jre/lib/rt.j$ \
-classpath "${PLATFORM}/android.jar" -d build/obj \
build/gen/com/probando/intento1/R.java \
"${PROJ}"/src/com/probando/intento1/*.java
我原以为 MainActivity.java 的编译足以调用 SecondActivity.java 但事实并非如此。 它必须首先编译成“R” R.java 是一个文件,其信息与您的文件 MainActivity.java 和 SecondActivity. java,但是你可以看到内存地址,而不是变量。
评论 1:标题反映了我对 AppCompatActivity 可能是 root-cause 的怀疑,但事实并非如此。 AppCompatActivity 只是 Android 更高版本中包含的一个设置。为了使用它,您需要在 java 文件标题的导入部分中指定它 评论 2:我推荐这个网站:https://www.hanshq.net/command-line-android.html 避免使用 Android Studio。 只需 3 个文件和几行代码,您就拥有了您的第一个应用程序。稍后,您只需修改它。 Comment3:以上指南适用于 64 位和版本 25.0.0。如果你碰巧有 32 位和 19.0.0 版本,做一个小改动可能会有所帮助: 对于 64 位:
$ "${BUILD_TOOLS}/zipalign" -f -p 4 \
build/Hello.unsigned.apk build/Hello.aligned.apk
对于 32 位:
$ "${BUILD_TOOLS}/zipalign" -f 4 \
build/Hello.unsigned.apk build/Hello.aligned.apk
出于某种原因 Android 停止支持更高版本的 32 位。
您需要删除标志 -p,由于某种原因无法识别。
评论 4:感谢上面网站的作者汉斯,他为那些出于任何原因不想使用 Android Studio 的人提供了精彩的指南 就我而言,Android Studio 在 4 RAM windows 机器中 运行 太慢了,我不敢将它安装在我的 Centos 7 和 2,5 RAM 中。
对于那些负担不起的人来说,命令行确实是 Android Studio 的一个选项。