【问题标题】:How to open a second activity on click of button in android app如何在Android应用程序中单击按钮打开第二个活动
【发布时间】:2012-10-23 01:03:41
【问题描述】:

我正在学习构建 Android 应用程序,我需要一些具体的帮助。我似乎无法理解需要更改哪些模板代码,哪些是静态的。

LAYOUT 文件夹中,我的 ACTIVITY_MAIN.XML 显示为

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout 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">

 <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/main_buttons_photos" />

 </LinearLayout>

接下来,我有我的第二个活动 ACTIVITY_SEND_PHOTOS.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/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/hello_world"
    tools:context=".SendPhotos" />

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/title_activity_send_photos"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 </RelativeLayout>

然后我有我的 MainActivity.java(这是 .class 吗?)这读 包 com.example.assent.bc;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.View;

 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;
 }
 /** Called when the user clicks the Send button */
 public void sendMessage(View view) {
     // Do something in response to button
 }
 }

然后是我的 SendPhotos.java 文件;

 package com.example.assent.bc;

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

 public class SendPhotos extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_photos);
    getActionBar().setDisplayHomeAsUpEnabled(true);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_send_photos, menu);
    return true;
 }


 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
 }

 }

我希望我的主要活动中的按钮链接到我的 sendphotos 活动,只需打开该活动,没有什么花哨的,不发送任何数据或任何东西。

我知道在某个地方我需要我的

 Intent i = new Intent(FromActivity.this, ToActivity.class);
 startActivity(i);

但我不知道用什么替换 ToActivity.class 或者我还需要什么。

【问题讨论】:

标签: android android-intent android-activity


【解决方案1】:

来自活动:您目前在哪里?

To Activity:你想去哪里?

Intent i = new Intent( MainActivity.this, SendPhotos.class); startActivity(i);

两个Activity都必须包含在manifest文件中,否则找不到类文件并抛出Force close。

编辑你的 Mainactivity.java

crate button's object;

现在为点击事件编写代码。

        Button btn = (button)findViewById(R.id.button1);
         btn.LoginButton.setOnClickListener(new View.OnClickListener() 
       {

                @Override
                public void onClick(View v) 
                {
                 //put your intent code here
                }
   });

希望它对你有用。

【讨论】:

  • 这是在布局还是 .java 中?
  • 好的,您可以将此代码放在主activity.java文件中的按钮单击事件中
【解决方案2】:

替换下面的行代码:

import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener{
   Button button;
    @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(this);
      }
       public void onClick(View v) {
        if(v.getId==R.id.button1){
      Intent i = new Intent(FromActivity.this, ToActivity.class);
               startActivity(i);
            }
        }
     }

在清单文件中添加以下行:

   <activity android:name="com.packagename.FromActivity"></activity>
   <activity android:name="com.packagename.ToActivity"></activity>

【讨论】:

    【解决方案3】:

    试试这个

      Button button;
    
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
    button=(Button)findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
    
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            Intent i = new Intent(getApplicationContext(),SendPhotos.class);
                            startActivity(i);
                        }
                    });
    
     }
    

    【讨论】:

    • 但是在哪里?如果我尝试将这个与 .java 放在 eclipse 中
    • @HenryAspden 导入 o​​nclocklistener 和 Button。
    • @HenryAspden 将此代码放在 onCreate 之后并找到您的 id 之后。
    • @HenryAspden 我已经编辑了我的代码,现在试试这个。我已将此代码放在 onCreate 中尝试这种方式。
    【解决方案4】:

    只需按照此步骤操作(我不是在编写代码,只是因为您可能会复制和粘贴而无法学习)..

    1. 首先你需要声明一个你在布局中拥有的按钮

    2. 通过在 oncreate 中查找其 id(使用 findviewById)来引用该按钮

    3. 按钮的设置监听器(如 setonclick 监听器)

    4. 最后处理点击事件(意味着使用你已经知道的意图开始新的活动)

    5. 别忘了在清单文件中添加活动

    顺便说一句,这很简单,我想建议您从可用的简单教程开始 在网上对你会更好..

    祝安卓好运

    【讨论】:

      【解决方案5】:

      您可以通过单击按钮移动到所需的活动。只需添加这一行。

      android:onClick="sendMessage"

      xml:

       <Button
              android:id="@+id/button1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="sendMessage"
              android:text="@string/button" />
      

      在你的主要活动中添加这个方法:

      public void sendMessage(View view) {
          Intent intent = new Intent(FromActivity.this, ToActivity.class);
          startActivity(intent);
      }
      

      还有最重要的一点:不要忘记在manifest.xml 中定义您的活动

       <activity>
            android:name=".ToActivity"
            android:label="@string/app_name">          
       </activity>
      

      【讨论】:

      • 必须在活动标签中添加&gt;
      • 这对我不起作用。 ViewIntent 和活动名称为红色。我需要为 View 导入任何东西吗?
      • @SrujanBarai 是的,都导入 android.view.View;并导入android.content.Intent;必须导入
      • 对我来说效果很好。但是他不需要在他的按钮上设置一个 setOnClickListener() 吗?
      • @VaggelisManousakis 不需要,因为它已经存在于 xml android:onClick="sendMessage"
      【解决方案6】:

      用这些代码替换您的 MainActivity.class

      public class MainActivity extends Activity {
      
      Button b1;
      @Override
      public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       b1=(Button)findViewById(R.id.button1);
       b1.setOnClickListener(new View.onClickListener()
       {
        public void onClick(View v)
         {
             Intent i=new Intent(getApplicationContext(),SendPhotos.class);
             startActivity(i);
          }
       }
       )
      }
      

      将这些代码添加到您的 AndroidManifest.xml &lt;/activity&gt; 之后和 &lt;/application&gt; 之前

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

      【讨论】:

        【解决方案7】:
        Button btn = (Button) findViewById(R.id.button1);
        
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(MainActivity.this, MainActivity2.class);
                MainActivity.this.startActivity(myIntent);       
            }  
        });
        

        完整菜鸟的完整菜鸟答案: MainActivity 是第一个活动的名称。 MainActivity2 是第二个活动的名称。 button1MainActivity Activity 的 xml 中按钮的 ID。

        【讨论】:

        • 只是为了帮助别人...通过“按钮名称”您指的是ID吗?
        • 确实。更正以反映您的建议
        【解决方案8】:

        这总是有效的,任何一个都可以:

        @Override
        public void onCreate(Bundle savedInstanceState) {
        
            super.onCreate(savedInstanceState);
        
            setContentView(R.layout.activity_main);
        
            Button btn = (Button) findViewById(R.id.button1);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick (View v) {
                    startActivity(new Intent("com.tobidae.Activity1"));
                }
                //** OR you can just use the one down here instead, both work either way
                @Override
                public void onClick (View v){
                    Intent i = new Intent(getApplicationContext(), ChemistryActivity.class);
                    startActivity(i);
                }
            }
        }
        

        【讨论】:

          【解决方案9】:

          如果您有两个按钮,并且对您的按钮单击事件有相同的 id 调用,如下所示:

          Button btn1;
          Button btn2;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          
              btn1= (Button)findViewById(R.id.button1);
          
              btn1.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Intent intent=new Intent(MainActivity.this,target.class);
                      startActivity(intent);
                  }
              });
          
              btn2=(Button) findViewById(R.id.button1);//Have same id call previous button---> button1
          
              btn2.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
          
                  }
              });
          

          当您单击button1 时,button2 将起作用,并且您无法打开第二个活动。

          【讨论】:

            【解决方案10】:
             <Button
                        android:id="@+id/btnSignIn"
                        android:layout_width="250dp"
                        android:layout_height="40dp"
                        android:layout_marginEnd="8dp"
                        android:layout_marginLeft="8dp"
                        android:layout_marginRight="8dp"
                        android:layout_marginStart="8dp"
                        android:layout_marginTop="16dp"
                        android:background="@drawable/circal"
                        android:text="Sign in"
                        android:textColor="@color/white"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/etPasswordLogin" />
            

            在 JAVA 代码中

            Button signIn= (Button) findViewById(R.id.btnSignIn);
            
            signIn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            startActivity(new Intent(SignInPage.this,MainActivity.class));
                        }
                    });
            

            }

            【讨论】:

              【解决方案11】:

              将以下代码添加到 activity_main.xml 文件:

              <Button
                      android:id="@+id/button1"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:onClick="buttonClick"
                      android:text="@string/button" />
              

              只需将以下方法添加到 MainActivity.java 文件:

              public void buttonClick(View view){
                Intent i = new Intent(getApplicationContext()SendPhotos.class);
                startActivity(i);
              }
              

              【讨论】:

              • 你打错字了,文件名前有个问号
              • 对错误感到抱歉
              【解决方案12】:

              您可以通过单击按钮移动到所需的活动。只需添加
              android:onClick="timerApp"这一行。

              xml:
              
               <Button
                      android:id="@+id/timer_app"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:onClick="timerApp"
                      android:text="Click To run Timer Activity" />
              

              在你的主要活动中添加这个方法:

               public void timerApp(View view){
                      Intent intent= new Intent(MainActivity.this,TimerActivity.class);
                      startActivity(intent);
                  }
              

              或在 onCreate() 方法中添加以下代码

              Button btn =findViewById(R.id.timer_app);//Don't need to type casting in android studio 3
              
              btn.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      Intent intent = new Intent(MainActivity.this, TimerActivity.class);
                      startActivity(intent);       
                  }  
              });
              

              【讨论】:

                猜你喜欢
                • 2017-12-03
                • 2019-05-19
                • 1970-01-01
                • 1970-01-01
                • 2015-09-30
                • 1970-01-01
                • 1970-01-01
                • 2019-01-17
                • 2011-06-28
                相关资源
                最近更新 更多