Android 앱에서 버튼 클릭으로 두 번째 활동을 여는 방법


96

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 를 무엇으로 대체 해야하는지 또는 어디에 필요한지 모르겠습니다.



1
ToActivity.class는 두 번째 활동 이름입니다
Niranj Patel 2012

이것은 당신을위한 가장 좋은 소스가 될 수
우 사마 사 디크

Intent 클래스에는 두 클래스를 인수로 받아들이는 생성자가 없습니다!. 어떻게해야합니까?
Emad Aghayi

답변:


156

버튼 클릭시 원하는 활동으로 이동할 수 있습니다. 이 줄을 추가하십시오.

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>

3
>활동 태그를 추가해야합니다
Mageek 2013 년

2
이것은 나를 위해 작동하지 않습니다. View, Intent및 활동 이름은 빨간색에 있습니다. View 용으로 가져와야합니까?
Srujan Barai

1
@SrujanBarai 예, 둘 다 import android.view.View; 및 import android.content.Intent; 가져와야합니다
William Reed

그것은 나를 위해 잘 작동했습니다. 그러나 그는 버튼에 setOnClickListener ()가 필요하지 않습니까?
Evaggelos Manousakis

1
@VaggelisManousakis는 이미 xml에 있기 때문에 필요하지 않습니다android:onClick="sendMessage"
Juned

30

이 시도

  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를 사용하여 이것을 배치하려고하면 모든 곳에서 오류가 발생합니다
Henry Aspden

@HenryAspden은 onclocklistener 및 Button을 가져옵니다.
JD

@HenryAspden은 onCreate와 ID를 찾은 후에이 코드를 넣습니다.
JD

@HenryAspden 나는 지금 이것을 시도 내 코드를 편집했습니다. 이 코드를 onCreate에 넣었습니다.
JD

11

활동에서 : 현재 어디에 있습니까?

활동 : 어디로 가고 싶습니까?

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

두 활동 모두 매니페스트 파일에 포함되어야합니다. 그렇지 않으면 클래스 파일을 찾을 수없고 강제 종료가 발생합니다.

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 내에 있습니까?
Henry Aspden 2012

확인 당신은 주요 activity.java 파일에 버튼의 클릭 이벤트에이 코드를 넣을 수 있습니다
들은 Chintan Khetiya

11
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두 번째 활동의 이름입니다. 활동에 button1대한 xml의 단추 ID입니다 MainActivity.


1
다른 사람들을 돕기 위해 ... "버튼 이름"으로 ID를 언급하고 있습니까?
Henry Aspden 2013-07-08

사실. 귀하의 추천을 반영하도록 수정
iAmNotVeryGoodAtThis 2013

5

이 단계를 따르십시오 (나는 Bcoz 코드를 작성하는 것이 아니라 복사하여 붙여 넣을 수 있으며 배울 수 없습니다) ..

  1. 먼저 레이아웃에있는 버튼을 선언해야합니다.

  2. oncreate에서 ID (findviewById 사용)를 찾아 해당 버튼에 대한 참조를 제공합니다.

  3. 버튼에 대한 setlistener (예 : setonclick listener)

  4. 마지막으로 클릭 이벤트 처리 (이미 알고있는 인 텐트를 사용하여 새 활동을 시작 함을 의미)

  5. 매니페스트 파일에 활동을 추가하는 것을 잊지 마십시오

BTW 이것은 간단합니다. 인터넷에서 제공되는 간단한 자습서에서 시작하는 것이 더 나을 것이라고 제안하고 싶습니다 ..

Android를위한 행운


3

아래 줄 코드를 바꿉니다.

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

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 이후 </activity>및 이전 에 추가하십시오.</application>

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

2

이것은 항상 작동합니다. 둘 중 하나는 괜찮습니다.

@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);
        }
    }
}

2

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);
}

당신의 오타, 파일의 이름 앞에 물음표가
마티유 VIALES

실수 죄송합니다
메릴랜드 Nakibul 하산

1

두 개의 버튼이 있고 다음과 같이 버튼 클릭 이벤트에 대해 동일한 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작동하고 당신은 당신의 두 번째 활동을 열 수 없습니다.


1
 <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" />

자바 코드

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));
            }
        });

}


1

버튼 클릭시 원하는 활동으로 이동할 수 있습니다. 단지 추가
안드로이드 : 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);       
    }  
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.