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 的一个选项。