【问题标题】:Using Intent in an Android application to show another activity在 Android 应用程序中使用 Intent 来显示另一个活动
【发布时间】:2010-10-18 16:55:20
【问题描述】:

在我的 Android 应用程序中,我有两个活动类。我在第一个按钮上有一个按钮,我想在单击它时显示第二个按钮,但出现错误。以下是课程:

public class FirstActivity extends Activity {

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

    Button orderButton = (Button)findViewById(R.id.order);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
        startActivity(intent);
      }

    });
  }
}

点击按钮时应该显示的第二个类,但从不显示:

public class OrderScreen extends Activity {

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

    Button orderButton = (Button) findViewById(R.id.end);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
      }

    });
  }
}

如何创建一个显示第二个活动的按钮?

【问题讨论】:

  • 编译或运行时是否出错?无论哪种情况,错误是什么?
  • 这是一个运行时错误。模拟器给出了通用的“应用程序已意外停止”错误,但使用调试器时,它显示了“android.content.ActivityNotFoundException:无法找到显式活动类 {class name} 您是否在 AndroidManifest.xml 中声明了此活动?
  • 这是一个非常常见的错误,人们忘记将他们的活动添加到 Manifest.xml 但应该有办法自动输入。

标签: android android-intent android-activity


【解决方案1】:

在清单中

<activity android:name=".OrderScreen" />

在您必须放置意图代码的 Java 代码中

startActivity(new Intent(CurrentActivity.this, OrderScreen.class);

【讨论】:

  • startActivity 中缺少一个右括号应该是这样的:startActivity(new Intent(CurrentActivity.this, OrderScreen.class));
【解决方案2】:

问题是 OrderScreen Activity 未添加到 AndroidManifest.xml。一旦我将它添加为应用程序节点,它就可以正常工作。

<activity android:name=".OrderScreen" />

【讨论】:

【解决方案3】:

在清单文件中添加活动

<activity android:name=".OrderScreen" />

【讨论】:

    【解决方案4】:
    <activity android:name="[packagename optional].ActivityClassName"></activity>
    

    只需添加我们要切换到的活动应该放在清单文件中

    【讨论】:

      【解决方案5】:
      b1 = (Button) findViewById(R.id.click_me);
              b1.setOnClickListener(new OnClickListener() {
      
                  public void onClick(View v) {
      
                      Intent i = new Intent(MainActivity.this, SecondActivity.class);
                      startActivity(i);
      
                  }
              });
      

      【讨论】:

      • 在清单文件中添加 SecondActivity 类。
      • View类型中的setOnClickListener(View.OnClickListener)方法不适用于参数(new OnClickListener(){})?
      【解决方案6】:

      ----FirstActivity.java-----

          package com.mindscripts.eid;
          import android.app.Activity;
          import android.content.Intent;
          import android.os.Bundle;
          import android.view.View;
          import android.view.View.OnClickListener;
          import android.widget.Button;
      
      public class FirstActivity extends Activity {
      
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          Button orderButton = (Button) findViewById(R.id.order);
          orderButton.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  Intent intent = new Intent(FirstActivity.this,OrderScreen.class);
                  startActivity(intent);
              }
          });
      
       }
      }
      

      ---OrderScreen.java---

          package com.mindscripts.eid;
      
          import android.app.Activity;
          import android.os.Bundle;
          import android.view.View;
          import android.view.View.OnClickListener;
          import android.widget.Button;
      
      
      
          public class OrderScreen extends Activity {
      @Override
      
      
      
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          setContentView(R.layout.second_class);
          Button orderButton = (Button) findViewById(R.id.end);
          orderButton.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  finish();
              }
          });
      
       }
      }
      

      ---AndroidManifest.xml----

          <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.mindscripts.eid"
        android:versionCode="1"
        android:versionName="1.0">
      
      
      <application android:icon="@drawable/icon" android:label="@string/app_name">
          <activity android:name=".FirstActivity"
                    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=".OrderScreen"></activity>
      </application>
      

      【讨论】:

      • 您可能想为 OP 的利益解释您的答案
      【解决方案7】:

      使用此代码:

      Intent intent=new Intent(context,SecondActivty.class);
      startActivity(intent);
      finish();
      

      上下文:引用当前活动上下文,

      请确保您已在 android 清单文件中添加了活动。

      在 android 清单文件中添加活动的以下代码

      <Activity name=".SecondActivity">
      </Activity>
      

      【讨论】:

      • java.lang.IllegalStateException: Fragment GetUserNumber{536bc00c} 未附加到 Activity。
      【解决方案8】:
      Intent i = new Intent("com.Android.SubActivity");
      startActivity(i);
      

      【讨论】:

        【解决方案9】:

        当你在 android 文件中创建任何活动时,你必须在 AndroidManifest.xml 中指定它

        <uses-sdk android:minSdkVersion="8" />
        
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MyCreativityActivity"
                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=".OrderScreen"></activity>
        
        
        </application>
        

        【讨论】:

          【解决方案10】:

          您可以使用调用视图的上下文。 示例:

          Button orderButton = (Button)findViewById(R.id.order);
          
          orderButton.setOnClickListener(new View.OnClickListener() {
          
            @Override
            public void onClick(View view) {
              Intent intent = new Intent(/*FirstActivity.this*/ view.getContext(), OrderScreen.class);
              startActivity(intent);
            }
          
          });
          

          【讨论】:

          • MainActivity 类型的 getContext() 方法未定义?
          【解决方案11】:

          将此行添加到您的 AndroidManifest.xml:

          <activity android:name=".OrderScreen" /> 
          

          【讨论】:

          • 为什么人们在几个月后才支持这个答案?
          • @Jaykul 在接受的答案中查看 2013 年的编辑
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-17
          相关资源
          最近更新 更多