버튼 클릭시 새로운 활동을 시작하는 방법


답변:


1115

쉬운.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);

추가 정보는 다음을 통해 다른 쪽에서 검색됩니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    String value = intent.getStringExtra("key"); //if it's a string you stored.
}

AndroidManifest.xml에 새로운 활동을 추가하는 것을 잊지 마십시오 :

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

18
버튼 클릭 부분은 어디에 있습니까? (버튼 클릭 → 다음 활동으로 전환)
Jonny

4
@Jonny : 다음은 버튼 클릭의 예입니다. stackoverflow.com/a/7722428/442512
Emmanuel

8
CurrentActivity.this.startActivity(myIntent)와 사이에 차이가 startActivity(myIntent)있습니까?
혼란

5
그래, 쉽게 롤. 실제로 입력 한 코드보다 더 많은 코드 누락이 있습니다. 모든 XML 인터페이스와 .java 코드가 누락 된 곳은? Downvote
리퀴드 코어

111
액체, 당신도 그를 APK에 포장하고 싶습니까? ;)
케이시 머레이

60

ViewPerson 활동에 대한 의도를 작성하고 PersonID를 전달하십시오 (예 : 데이터베이스 검색).

Intent i = new Intent(getBaseContext(), ViewPerson.class);                      
i.putExtra("PersonID", personID);
startActivity(i);

그런 다음 ViewPerson Activity에서 추가 데이터 번들을 가져 와서 null이 아닌지 확인하고 (때로는 데이터를 전달하지 않는 경우) 데이터를 가져옵니다.

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}

이제 두 활동간에 데이터를 공유해야하는 경우 글로벌 싱글 톤을 가질 수도 있습니다.

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

그런 다음 다음을 수행하여 활동에서 호출하십시오.

YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here.  Could be setter/getter or some other type of logic

58

현재 답변은 훌륭하지만 초보자에게는보다 포괄적 인 답변이 필요합니다. Android에서 새로운 활동을 시작하는 방법은 3 가지가 있으며 모두 Intent클래스를 사용합니다 . 의도 | 안드로이드 개발자 .

  1. onClick버튼 의 속성을 사용합니다 . (초보자)
  2. OnClickListener()익명 클래스를 통해 할당 . (중급)
  3. switch명령문을 사용한 활동 전체 인터페이스 방법 . (찬성)

따라하고 싶다면 내 예에 대한 링크 가 있습니다.

1. onClick버튼 의 속성 사용 . (초보자)

버튼에는 onClick.xml 파일 내에 있는 속성이 있습니다.

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnActivity"
    android:text="to an activity" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnotherActivity"
    android:text="to another activity" />

자바 클래스에서 :

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

public void goToAnActivity(View view) {
    Intent intent = new Intent(this, AnActivity.class);
    startActivity(intent);
}

public void goToAnotherActivity(View view) {
    Intent intent = new Intent(this, AnotherActivity.class);
    startActivity(intent);
}

장점 : 쉽고 빠르게 모듈 식으로 만들 수 있으며 여러 onClick의도를 동일한 의도로 쉽게 설정할 수 있습니다 .

단점 : 검토 할 때 어려운 가독성.

2. OnClickListener()익명 클래스를 통해 할당 . (중급)

이것은 setOnClickListener()각각을 개별적 으로 설정하고 button각각 onClick()의 의도 로 각각 을 재정의하는 경우 입니다.

자바 클래스에서 :

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnActivity.class);
                view.getContext().startActivity(intent);}
            });

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnotherActivity.class);
                view.getContext().startActivity(intent);}
            });

장점 : 즉석에서 쉽게 만들 수 있습니다.

단점 : 검토 할 때 가독성을 떨어 뜨리는 익명 클래스가 많이있을 것입니다.

3. switch문장을 사용한 활동 전반의 인터페이스 방법 . (찬성)

메소드 switch내에서 단추에 대한 명령문을 사용하여 onClick()모든 활동 단추를 관리 할 때입니다.

자바 클래스에서 :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            Intent intent1 = new Intent(this, AnActivity.class);
            startActivity(intent1);
            break;
        case R.id.button2:
            Intent intent2 = new Intent(this, AnotherActivity.class);
            startActivity(intent2);
            break;
        default:
            break;
    }

장점 : 모든 버튼 의도가 단일 onClick()방법으로 등록되어있어 간편한 버튼 관리


질문의 두 번째 부분 인 데이터 전달에 대해서는 Android 애플리케이션의 활동간에 데이터를 전달하는 방법을 참조하십시오 .


훌륭한 답변, 감사합니다! 제안 사항 중 하나를 사용하여 성능 저하에 대해 알고 있습니까?
lmedinas

3
# 3은 "프로"가 아닙니다. 가장 읽기 쉽고 유지 관리가 쉬운 옵션이며, 처음 경험이 풍부한 개발자가이를 1 번 또는 2 번으로 리팩토링합니다. (또는 그들은 스테로이드에서 옵션 # 1 인 버터 나이프를 사용합니다.)
Kevin Krumwiede

프로 프로그래머는 # 3을 전혀 좋아하지 않는다고 생각합니다. 퍼팅, Idk, 10 버튼 클릭 핸들러는 1 가지 방법으로 악몽이며 전혀 전문가가 아닙니다. zilion 코드 행을 사용하는 방법으로 전문가가되지는 않습니다. 키스 .
Mehdi Dehghani

3은 확실히 "프로"가 아닙니다
Kaiser Keister

36

사용자가 버튼을 클릭하면 XML 내부에서 다음과 같이 직접 수행됩니다.

<Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextButton"
         android:onClick="buttonClickFunction"/>

속성 android:onClick을 사용하여 부모 활동에 존재해야하는 메소드 이름을 선언합니다. 따라서 다음과 같이 활동 내에서이 메소드를 작성해야합니다.

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}

19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

2
이것은 부분 답변입니다. 또한 충분하지 않습니다. 즉 프로젝트를 추가로 수정하지 않으면 작동하지 않습니다.
andr

10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.

8

엠마누엘,

액티비티를 시작하기 전에 추가 정보를 넣어야한다고 생각합니다. 그렇지 않으면 NextActivity의 onCreate 메소드에서 액세스하면 데이터를 사용할 수 없습니다.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

보내는 활동에서 다음 코드를 시도하십시오.

   //EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
    public static final String EXTRA_MESSAGE = "packageName.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ....

        //Here we declare our send button
        Button sendButton = (Button) findViewById(R.id.send_button);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //declare our intent object which takes two parameters, the context and the new activity name

                // the name of the receiving activity is declared in the Intent Constructor
                Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);

                String sendMessage = "hello world"
                //put the text inside the intent and send it to another Activity
                intent.putExtra(EXTRA_MESSAGE, sendMessage);
                //start the activity
                startActivity(intent);

            }

수신 활동에서 다음 코드를 시도하십시오.

   protected void onCreate(Bundle savedInstanceState) {
 //use the getIntent()method to receive the data from another activity
 Intent intent = getIntent();

//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);

그런 다음 AndroidManifest.xml 파일에 다음 코드를 추가하십시오.

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"

7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

7

이 간단한 방법을 사용해보십시오.

startActivity(new Intent(MainActivity.this, SecondActivity.class));

5

이 코드를 시도해 볼 수 있습니다.

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);

4

새로운 활동을 시작하는 방법은 의도를 브로드 캐스트하는 것이며 특정 활동에서 다른 활동으로 데이터를 전달하는 데 사용할 수있는 특정 종류의 의도가 있습니다. 내 권장 사항은 의도 와 관련된 Android 개발자 문서를 확인하는 것입니다 . 주제에 대한 풍부한 정보이며 예제도 있습니다.


4

코 틀린

첫 활동

startActivity(Intent(this, SecondActivity::class.java)
  .putExtra("key", "value"))

두 번째 활동

val value = getIntent().getStringExtra("key")

암시

보다 관리 된 방식으로 키를 항상 일정한 파일에 넣으십시오.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))

4

다른 활동에서 활동을 시작하는 것은 안드로이드 응용 프로그램에서 매우 일반적인 시나리오입니다.
활동을 시작하려면 인 텐트 오브젝트 가 필요 합니다.

의도 객체를 만드는 방법?

인 텐트 오브젝트는 생성자에서 두 개의 매개 변수를 사용합니다.

  1. 문맥
  2. 시작할 활동의 이름입니다 . (또는 전체 패키지 이름)

예:

여기에 이미지 설명을 입력하십시오

예를 들어, 두 가지 활동이 HomeActivity있고 DetailActivity(HomeActivity-> DetailActivity)DetailActivity 에서 시작하려는 경우 HomeActivity .

다음은 DetailActivity를 시작하는 방법을 보여주는 코드 스 니펫입니다.

가정 활동.

Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);

그리고 당신은 끝났습니다.

버튼 클릭 부분으로 돌아갑니다.

Button button = (Button) findViewById(R.id.someid);

button.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         Intent i = new Intent(HomeActivity.this,DetailActivity.class);
         startActivity(i);  
      }

});

3

이 활동에서 다른 활동을 시작하면 u는 Bundle Object를 통해 매개 변수를 전달할 수도 있습니다.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);

다른 활동 (YourActivity)에서 데이터 검색

String s = getIntent().getStringExtra("USER_NAME");

2

View.OnClickListener 인터페이스를 구현하고 onClick 메소드를 대체하십시오.

ImageView btnSearch;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search1);
        ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
        btnSearch.setOnClickListener(this);
    }

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSearch: {
                Intent intent = new Intent(Search.this,SearchFeedActivity.class);
                startActivity(intent);
                break;
            }

2

적절한 답변이 이미 제공되었지만 Kotlin 언어로 답변을 검색하기 위해 여기 있습니다. 이 질문은 언어에 관한 것이 아니므로 Kotlin 언어 로이 작업을 수행하기 위해 코드를 추가하고 있습니다.

Kotlin에서 andorid에 대해이 작업을 수행하는 방법은 다음과 같습니다.

testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }

2

버튼 클릭시 액티비티를 여는 가장 간단한 방법은 다음과 같습니다.

  1. res 폴더 아래에 두 개의 활동을 작성하고 첫 번째 활동에 단추를 추가 한 후 onclick기능 이름을 지정하십시오 .
  2. 각 활동마다 두 개의 Java 파일이 있어야합니다.
  3. 아래는 코드입니다.

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void goToAnotherActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

SecondActivity.java

package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);
    }
}

AndroidManifest.xml (기존 코드에이 코드 블록을 추가하면 됨)

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

1

먼저 xml의 버튼을 사용하십시오.

  <Button
        android:id="@+id/pre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        android:text="Your Text"
        />

버튼을 리스터로 만듭니다.

 pre.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });

1

버튼을 클릭하면 :

loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent= new Intent(getApplicationContext(), NextActivity.class);
        intent.putExtra("data", value); //pass data
        startActivity(intent);
    }
});

추가 데이터를 수신하려면 NextActivity.class:

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}

1

첫 번째 활동에서 코드를 작성하십시오.

button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
                       //You can use String ,arraylist ,integer ,float and all data type.
                       intent.putExtra("Key","value");
                       startActivity(intent);
                        finish();
            }
         });

secondActivity.class에서

String name = getIntent().getStringExtra("Key");

1

아래와 같이 XML에 버튼 위젯 배치

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

그 후 아래와 같이 Activity에서 클릭 리스너를 초기화하고 처리하십시오.

Activity On Create 메소드에서 :

Button button =(Button) findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent intent = new 
            Intent(CurrentActivity.this,DesiredActivity.class);
            startActivity(intent);
    }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.