Cách mở hoạt động thứ hai khi nhấp vào nút trong ứng dụng Android


96

Tôi đang học cách xây dựng các ứng dụng Android và tôi cần một số trợ giúp cụ thể. Tôi dường như không thể hiểu được những bit nào của mã mẫu mà tôi bắt buộc phải thay đổi và những bit nào là tĩnh.

Trong thư mục LAYOUT, tôi có ACTIVITY_MAIN.XML mà đọc

 <?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>

Tiếp theo, tôi có hoạt động thứ hai của tôi là 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>

Sau đó, tôi có MainActivity.java (đây có phải là .class không?), Cái này đọc gói 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
 }
 }

và sau đó là tệp SendPhotos.java của tôi ;

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

 }

Tôi muốn nút trong hoạt động chính của tôi liên kết đến hoạt động sendphotos của tôi, chỉ cần mở hoạt động đó, không có gì lạ mắt, không gửi bất kỳ dữ liệu hay bất kỳ thứ gì.

Tôi biết rằng ở đâu đó tôi cần

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

nhưng tôi không biết phải thay thế ToActivity.class bằng cái gì hoặc tôi cần cái gì khác ở đâu.



1
ToActivity.class là tên secondactivity của bạn
Niranj Patel

Đây có thể là nguồn tốt nhất cho bạn
Usama Sadiq

Lớp Intent không có bất kỳ phương thức khởi tạo nào chấp nhận hai lớp dưới dạng argment !. tôi nên làm gì?
Emad Aghayi

Câu trả lời:


155

Bạn có thể chuyển đến hoạt động mong muốn khi nhấp vào nút. chỉ cần thêm dòng này.

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

Trong hoạt động chính của bạn, chỉ cần thêm phương pháp này:

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

Và điều quan trọng nhất: đừng quên xác định hoạt động của bạn trong manifest.xml

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

3
Bạn phải thêm >thẻ hoạt động
Mageek 21/09/13

2
Điều này không làm việc cho tôi. Các View, Intentvà tên hoạt động có màu đỏ. Tôi có cần nhập bất kỳ thứ gì cho Chế độ xem không?
Srujan Barai

1
@SrujanBarai có, cả hai đều nhập android.view.View; và nhập android.content.Intent; phải được nhập
William Reed

Nó làm việc tốt cho tôi. Tuy nhiên, anh ta không cần setOnClickListener () trên nút của mình?
Evaggelos Manousakis,

1
@VaggelisManousakis không nó không bắt buộc vì nó đã có trong xmlandroid:onClick="sendMessage"
Juned

30

Thử cái này

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

 }

nhưng ở đâu? Tôi gặp lỗi ở khắp nơi Nếu tôi thử đặt cái này vào bên trong .java trong nhật thực
Henry Aspden

@HenryAspden nhập onclocklistener và nút.
JD

@HenryAspden đặt mã này sau onCreate và sau khi tìm thấy id của bạn.
JD

@HenryAspden Tôi đã chỉnh sửa mã của mình bây giờ hãy thử cái này. Tôi đã đặt mã này trong onCreate, hãy thử cách này.
JD

11

Từ Hoạt động: bạn hiện đang ở đâu?

Tới Hoạt động: bạn muốn đi đâu?

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

Cả hai Activity phải được bao gồm trong tệp kê khai nếu không nó sẽ không tìm thấy tệp lớp và đóng Force.

Chỉnh sửa Mainactivity.java của bạn

crate button's object;

bây giờ Viết mã cho sự kiện nhấp chuột.

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

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

Hy vọng nó sẽ làm việc cho bạn.


điều này có nằm trong bố cục hoặc tệp .java không?
Henry Aspden

ok bạn có thể đặt mã này trong sự kiện click nút trong tập tin activity.java chính
hack 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);       
    }  
});

Câu trả lời cho noob hoàn chỉnh từ một noob hoàn chỉnh: MainActivitylà tên của hoạt động đầu tiên. MainActivity2là tên của hoạt động thứ hai. button1là ID của nút trong xml cho MainActivityHoạt động.


1
chỉ để giúp đỡ người khác ... bằng "tên của nút" bạn đang tham khảo ID?
Henry Aspden,

Thật . Điều chỉnh để phản ánh reccomendation của bạn
iAmNotVeryGoodAtThis

5

chỉ cần làm theo bước này (tôi không viết mã chỉ Bcoz, bạn có thể sao chép và dán và không thể học) ..

  1. trước hết bạn cần khai báo một nút mà bạn có trong bố cục

  2. Cung cấp tham chiếu đến nút đó bằng cách tìm id của nó (sử dụng findviewById) trong oncreate

  3. setlistener cho nút (như trình nghe setonclick)

  4. lần cuối xử lý sự kiện nhấp chuột (có nghĩa là bắt đầu hoạt động mới bằng cách sử dụng ý định như bạn đã biết)

  5. Đừng quên thêm hoạt động vào tệp kê khai

BTW điều này chỉ đơn giản, tôi muốn đề nghị bạn rằng chỉ cần bắt đầu từ các hướng dẫn đơn giản có sẵn trên mạng sẽ tốt hơn cho bạn ..

Chúc may mắn cho Android


3

Thay thế mã dòng dưới đây:

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

Thêm các dòng dưới đây vào tệp kê khai của bạn:

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

3

Thay thế lớp MainActivity.class của bạn bằng mã này

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

Thêm các mã này vào AndroidManifest.xml sau </activity>và trước</application>

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

2

Điều này luôn hoạt động, một trong hai sẽ ổn:

@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

thêm mã bên dưới vào tệp 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" />

và chỉ cần thêm phương thức dưới đây vào tệp MainActivity.java:

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

Bạn có một lỗi đánh máy trong, một dấu hỏi trước tên của tập tin
Mathieu VIALES

Xin lỗi vì sự nhầm lẫn
Md Nakibul Hassan

1

Nếu bạn có hai nút và có cùng một id gọi đến các sự kiện nhấp vào nút của bạn như thế này:

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

        }
    });

Khi bạn nhấp vào button1, button2sẽ hoạt động và bạn không thể mở hoạt động thứ hai của mình.


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

TRONG MÃ 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));
            }
        });

}


1

Bạn có thể chuyển đến hoạt động mong muốn khi nhấp vào nút. chỉ cần thêm
android: onClick = "timerApp" dòng này.

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

Trong hoạt động chính của bạn, chỉ cần thêm phương pháp này:

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

HOẶC trong phương thức onCreate () thêm mã bên dưới

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