0

我昨天刚开始学习 Android,想编写一个非常简单的应用程序,其中包含 2 个视图用于学习目的。

活动/视图 1:1 按钮和文本“Hello World” 单击按钮时,它应该转到下一个只有文本“测试”的活动/视图。

这是我的活动 1 代码:

package helloworld.app;


import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuItem; import
android.support.v4.app.NavUtils; 
/*import AudioRecordTest;*/

public class MainActivity extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.activity_main, menu);
     return true;
 }

 public void startRecording() {
    setContentView(R.layout.next_page);
 }
  }

这是我的活动 2 代码:package helloworld.app;

import android.os.Bundle; 
import android.app.Activity; import
android.view.Menu; 
import android.view.MenuItem; import
android.support.v4.app.NavUtils; 
/*import AudioRecordTest;*/

public class next_page extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.next_page);
 } }

这是我用于活动 1 的 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" >

 <TextView
     android:id="@+id/textView1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_centerVertical="true"
     android:padding="@dimen/padding_medium"
     android:text="@string/hello_world"
     tools:context=".MainActivity" />

 <Button
     android:id="@+id/button1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignParentTop="true"
     android:layout_alignRight="@+id/textView1"
     android:layout_marginRight="40dp"
     android:layout_marginTop="32dp"
     android:text="Start Recording"
     android:onClick="startRecording" />

</RelativeLayout>

编辑:这是我来自 logcat 的错误消息

08-01 07:00:49.253:I/Choreographer(1326):跳过 40 帧!应用程序可能在其主线程上做了太多工作。

08-01 07:01:11.653: D/AndroidRuntime(1326): 关闭 VM

08-01 07:01:11.653: W/dalvikvm(1326): threadid=1: 线程以未捕获的异常退出 (group=0x40a13300)

08-01 07:01:11.673:E/AndroidRuntime(1326):致命异常:主要

08-01 07:01:11.673: E/AndroidRuntime(1326): java.lang.IllegalStateException: 在视图类 android.widget 上的 onClick 处理程序的活动类 helloworld.app.MainActivity 中找不到方法 startRecording(View)。 ID 为“button1”的按钮

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.view.View$1.onClick(View.java:3578)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.view.View.performClick(View.java:4084)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.view.View$PerformClick.run(View.java:16966)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.os.Handler.handleCallback(Handler.java:615)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.os.Handler.dispatchMessage(Handler.java:92)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.os.Looper.loop(Looper.java:137)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.app.ActivityThread.main(ActivityThread.java:4745)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 java.lang.reflect.Method.invokeNative(Native Method)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 java.lang.reflect.Method.invoke(Method.java:511)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

08-01 07:01:11.673:E/AndroidRuntime(1326):在 dalvik.system.NativeStart.main(本机方法)

08-01 07:01:11.673: E/AndroidRuntime(1326): 由: java.lang.NoSuchMethodException: startRecording [class android.view.View]

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 java.lang.Class.getConstructorOrMethod(Class.java:460)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 java.lang.Class.getMethod(Class.java:915)

08-01 07:01:11.673: E/AndroidRuntime(1326): 在 android.view.View$1.onClick(View.java:3571)

08-01 07:01:11.673: E/AndroidRuntime(1326): ... 11 更多

EDIT2:我发现我的错误!我应该为我的 startRecording 函数传入 View 视图。这是编辑后的代码:

public void startRecording(View view) 
{
Intent intent = new Intent(this, next_page.class);  
startActivity(intent); 
}
4

6 回答 6

3

为了使它工作,这应该是你的startRecording方法:

public void startRecording(View v) {     
    // setContentView(R.layout.next_page); this will modify the current activity view
    // if you want to start a new activity:
    Intent i = new Intent(this, next_page.class);
    startActivity(i);
}

确保您已在清单文件中声明了这两个活动。要让 android “看到”并使用您的活动,必须在AndroidManifest.xml文件中声明:

// ...
<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=".next_page" />
// ...

您应该阅读 android 开发者网站或一些教程,这是基本的东西。

于 2012-08-01T06:14:48.860 回答
1

您可以使用 Intent 类从一个 Activity 转到一个 Activity

public void startRecording(View v) {
    Intent intent = new Intent(this, NewActivity.class);
    startActivity(intent);

}

Add your Android Manifest configuration file



   <activity android:name="NewActivity"></activity>
于 2012-08-01T06:14:28.500 回答
0

使用缩进在活动之间切换。示例代码

btnNextScreen.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            //Starting a new Intent
            Intent nextScreen = new Intent(getApplicationContext(), SecondScreenActivity.class);

            //Sending data to another Activity
            nextScreen.putExtra("name", inputName.getText().toString());
            nextScreen.putExtra("email", inputEmail.getText().toString());

            Log.e("n", inputName.getText()+"."+ inputEmail.getText());

            startActivity(nextScreen);

        }
    });
于 2012-08-01T06:15:52.820 回答
0

好吧,您假设触发下一个活动的是按钮,我会这样做:

Button butt = (Button)findViewById(R.id.button1);
butt.setOnClickListener(new View.onClickListener(
    public void onClick(View v) {
        Intent intent = new Intent(v.getContext());
        //optionally, you could provide it stuff to send to the second Activity if you wish
        startActivity(intent);
    }
));

但老实说,你可以通过研究自己弄清楚这一点。

于 2012-08-01T06:15:54.227 回答
0

startRecording - 错误的代码。需要写:

startActivity(new Intent(this, next_page.class));

并学习如何格式化代码

于 2012-08-01T06:16:14.127 回答
0

在第一个活动的 onCreate 方法中,如下所示

Button button1=(Button)findViewById(r.id.button1);

button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);  
            }
        });
于 2012-08-01T06:17:06.970 回答