Làm thế nào để bắt đầu hoạt động mới trên nút bấm


Câu trả lời:


1116

Dễ dàng.

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

Extras được lấy ở phía bên kia thông qua:

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

Đừng quên thêm hoạt động mới của bạn vào AndroidManifest.xml:

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

18
Nút bấm ở đâu? (nhấp vào nút → chuyển sang hoạt động tiếp theo)
Jonny

4
@Jonny: Đây là một ví dụ về một lần bấm nút. stackoverflow.com/a/7722428/442512
Emmanuel

8
Có sự khác biệt nào giữa CurrentActivity.this.startActivity(myIntent)startActivity(myIntent)không?
Nhầm lẫn

5
Vâng, dễ dàng lol. Có nhiều mã hóa hơn mã thực sự được gõ. Trường hợp tất cả giao diện xml và mã .java bị thiếu? Downvote
Lõi lỏng

111
Liquid, bạn có muốn anh ấy đóng gói nó vào apk không? ;)
Casey Murray

60

Tạo một ý định cho một hoạt động ViewPerson và vượt qua PersonID (ví dụ để tìm kiếm cơ sở dữ liệu).

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

Sau đó, trong Hoạt động của ViewPerson, bạn có thể nhận được gói dữ liệu bổ sung, đảm bảo rằng nó không có giá trị (trong trường hợp nếu đôi khi bạn không truyền dữ liệu), sau đó lấy dữ liệu.

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

Bây giờ nếu bạn cần chia sẻ dữ liệu giữa hai Hoạt động, bạn cũng có thể có Global Singleton.

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

Sau đó gọi nó trong bất kỳ hoạt động nào bằng cách:

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

Câu trả lời hiện tại là tuyệt vời nhưng một câu trả lời toàn diện hơn là cần thiết cho người mới bắt đầu. Có 3 cách khác nhau để bắt đầu một hoạt động mới trong Android và tất cả đều sử dụng Intentlớp; Ý định | Nhà phát triển Android .

  1. Sử dụng onClickthuộc tính của Nút. (Người bắt đầu)
  2. Chỉ định một OnClickListener()thông qua một lớp ẩn danh. (Trung gian)
  3. Phương pháp giao diện rộng hoạt động bằng cách sử dụng switchcâu lệnh. (Chuyên nghiệp)

Đây là liên kết đến ví dụ của tôi nếu bạn muốn theo dõi:

1. Sử dụng onClickthuộc tính của Nút. (Người bắt đầu)

Các nút có một onClickthuộc tính được tìm thấy trong tệp .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" />

Trong lớp Java:

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

Ưu điểm : Dễ dàng thực hiện khi đang di chuyển, mô-đun và có thể dễ dàng đặt nhiều onClicks cho cùng một mục đích.

Nhược điểm : Khó đọc khi xem lại.

2. Chỉ định một OnClickListener()thông qua một lớp ẩn danh. (Trung gian)

Đây là khi bạn đặt riêng setOnClickListener()cho từng mục buttonvà ghi đè lên từng onClick()mục đích riêng.

Trong lớp Java:

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

Ưu điểm : Dễ dàng thực hiện khi đang bay.

Nhược điểm : Sẽ có rất nhiều lớp ẩn danh sẽ khiến việc đọc trở nên khó khăn khi xem xét.

3. Phương pháp giao diện rộng hoạt động bằng cách sử dụng switchcâu lệnh. (Chuyên nghiệp)

Đây là khi bạn sử dụng một switchtuyên bố cho các nút của bạn trongonClick() phương thức để quản lý tất cả các nút của Hoạt động.

Trong lớp Java:

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

Ưu điểm : Quản lý nút dễ dàng vì tất cả các ý định nút được đăng ký trong một onClick()phương thức duy nhất


Đối với phần thứ hai của câu hỏi, truyền dữ liệu, vui lòng xem Làm cách nào để chuyển dữ liệu giữa các Hoạt động trong ứng dụng Android?


Câu trả lời tuyệt vời, thankyou! Bạn có biết về bất kỳ hình phạt hiệu suất bằng cách sử dụng bất kỳ đề xuất?
lmedina

3
# 3 không phải là "pro" Đây là tùy chọn ít đọc và duy trì nhất, và nó sẽ được tái cấu trúc thành # 1 hoặc # 2 bởi nhà phát triển có kinh nghiệm đầu tiên nhìn thấy nó. (Hoặc họ sẽ sử dụng Butterknife, là lựa chọn số 1 trên steroid.)
Kevin Krumwiede

Tôi nghĩ các lập trình viên chuyên nghiệp không thích # 3 chút nào. Đặt, Idk, 10 nút bấm xử lý bên trong 1 phương thức là một cơn ác mộng và không chuyên nghiệp chút nào. phương pháp với các dòng mã zgroup không làm cho bạn chuyên nghiệp. HÔN .
Mehdi Dehghani

3 chắc chắn không phải là "pro"
Kaiser Keister

36

Khi người dùng nhấp vào nút, trực tiếp bên trong XML như thế:

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

Sử dụng thuộc tính, android:onClickchúng tôi khai báo tên phương thức phải có trên hoạt động cha. Vì vậy, tôi phải tạo ra phương pháp này trong hoạt động của chúng tôi như thế:

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
đây chỉ là câu trả lời một phần hơn nữa, nó không đủ, tức là nó sẽ không hoạt động nếu không có sửa đổi bổ sung trong dự án.
andr

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

    This is an explicit intent to start secondscreen activity.

8

Emmanuel,

Tôi nghĩ rằng nên đặt thêm thông tin trước khi bắt đầu hoạt động nếu không dữ liệu sẽ không khả dụng nếu bạn truy cập vào phương thức onCreate của NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

Từ hoạt động gửi hãy thử đoạn mã sau

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

            }

Từ hoạt động nhận, hãy thử đoạn mã sau:

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

Sau đó, chỉ cần thêm đoạn mã sau vào tệp 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

Hãy thử phương pháp đơn giản này.

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

5

Bạn có thể thử mã này:

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

4

Cách để bắt đầu các hoạt động mới là phát một ý định và có một loại ý định cụ thể mà bạn có thể sử dụng để truyền dữ liệu từ hoạt động này sang hoạt động khác. Đề nghị của tôi là bạn nên kiểm tra các tài liệu dành cho nhà phát triển Android có liên quan đến ý định ; đó là vô số thông tin về chủ đề này và cũng có ví dụ.


4

Kotlin

Hoạt động đầu tiên

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

Hoạt động thứ hai

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

Gợi ý

Luôn đặt các khóa trong tệp không đổi để quản lý nhiều hơn.

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

4

Bắt đầu một hoạt động từ một hoạt động khác là kịch bản rất phổ biến trong số các ứng dụng Android.
Để bắt đầu một hoạt động bạn cần một đối tượng Ý định .

Làm thế nào để tạo Đối tượng Ý định?

Một đối tượng có ý định lấy hai tham số trong hàm tạo của nó

  1. Bối cảnh
  2. Tên của hoạt động sẽ được bắt đầu. (hoặc tên gói đầy đủ)

Thí dụ:

nhập mô tả hình ảnh ở đây

Vì vậy, ví dụ, nếu bạn có hai hoạt động, nói HomeActivityDetailActivityvà bạn muốn bắt đầu DetailActivitytừ HomeActivity (HomeActivity -> DetailActivity).

Đây là đoạn mã cho biết cách bắt đầu Chi tiết từ

Trang chủ Hoạt động.

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

Và bạn đã hoàn thành.

Quay trở lại nút bấm một phần.

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

Bắt đầu một hoạt động khác từ hoạt động này và bạn cũng có thể truyền tham số qua Bundle Object.

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

Lấy lại dữ liệu trong một hoạt động khác (YourActivity)

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

2

Triển khai giao diện View.OnClickListener và ghi đè phương thức 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

Mặc dù câu trả lời thích hợp đã được cung cấp nhưng tôi ở đây để tìm kiếm câu trả lời bằng ngôn ngữ Kotlin. Câu hỏi này không phải là về ngôn ngữ cụ thể vì vậy tôi đang thêm mã để hoàn thành nhiệm vụ này bằng ngôn ngữ Kotlin.

Đây là cách bạn làm điều này trong Kotlin cho andorid

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

 }

2

Cách đơn giản nhất để mở hoạt động khi nhấp vào nút là:

  1. Tạo hai hoạt động trong thư mục res, thêm một nút vào hoạt động đầu tiên và đặt tên cho onclickchức năng.
  2. Cần có hai tệp java cho mỗi hoạt động.
  3. Dưới đây là mã:

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

Thứ haiActivity.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 (Chỉ cần thêm khối mã này vào hiện tại)

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

1

Lấy nút trong xml trước.

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

Hãy lắng nghe nút.

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

1

Khi nhấp vào nút:

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

Để nhận thêm dữ liệu từ NextActivity.class:

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

1

Viết mã trong hoạt động đầu tiên của bạn.

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

Trong secondActivity. Class

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

1

Đặt widget nút trong xml như bên dưới

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

Sau đó khởi tạo và xử lý người nghe nhấp vào Hoạt động như bên dưới ..

Trong hoạt động Tạo phương thức:

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);
    }
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.