Jak otworzyć drugą czynność po kliknięciu przycisku w aplikacji na Androida

96

Uczę się budować aplikacje na Androida i potrzebuję konkretnej pomocy. Nie wiem, które bity kodu szablonu mam zmienić, a które są statyczne.

W folderze LAYOUT mam plik ACTIVITY_MAIN.XML, który czyta

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

Następnie mam drugie działanie ACTIVITY_SEND_PHOTOS.XML, czyli

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

Mam wtedy plik MainActivity.java (czy to jest klasa. ?) Czyta pakiet 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
 }
 }

a następnie mój plik SendPhotos.java , który jest;

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

 }

Chciałbym, aby przycisk w mojej głównej aktywności łączył się z moją aktywnością sendphotos, po prostu otwierając tę ​​czynność, nic nadzwyczajnego, nie wysyłanie żadnych danych ani nic.

Wiem, że gdzieś potrzebuję mojego

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

ale nie mam pojęcia, czym zastąpić ToActivity.class lub czego jeszcze potrzebuję.

Henry Aspden
źródło
1
ToActivity.class to twoja nazwa drugiej aktywności
Niranj Patel
To może być najlepsze źródło dla Ciebie
Usama Sadiq
Klasa intencyjna nie ma żadnego konstruktora, który akceptuje dwie klasy jako argumenty !. co powinienem zrobić?
Emad Aghayi

Odpowiedzi:

156

Możesz przejść do żądanej czynności po kliknięciu przycisku. po prostu dodaj tę linię.

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

W swojej głównej aktywności po prostu dodaj tę metodę:

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

I najważniejsze: nie zapomnij zdefiniować swojej aktywności w manifest.xml

 <activity>
      android:name=".ToActivity"
      android:label="@string/app_name">          
 </activity>
Juned
źródło
3
Musisz dodać >w tagu aktywności
Mageek
2
To nie działa dla mnie. Te View, Intentoraz nazwy aktywności są w kolorze czerwonym. Czy muszę cokolwiek importować do widoku?
Srujan Barai
1
@SrujanBarai tak, oba importują android.view.View; i zaimportuj android.content.Intent; musi być importowany
William Reed
U mnie to działało dobrze. Jednak czy nie potrzebuje on setOnClickListener () na swoim przycisku?
Evaggelos Manousakis
1
@VaggelisManousakis nie jest wymagane, ponieważ jest już tam w xmlandroid:onClick="sendMessage"
Juned
30

Spróbuj tego

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

 }
JD
źródło
ale gdzie? Dostaję błędy w każdym miejscu, jeśli spróbuję umieścić to za pomocą .java w zaćmieniu
Henry Aspden
@HenryAspden importuj onclocklistener i Button.
JD
@HenryAspden umieścił ten kod po onCreate i po znalezieniu swojego identyfikatora.
JD
@HenryAspden mam teraz edytować mój kod, spróbuj tego. umieściłem ten kod w onCreate spróbuj w ten sposób.
JD
11

Z działania: gdzie obecnie jesteś?

Do działania: gdzie chcesz iść?

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

Oba działania muszą być zawarte w pliku manifestu, w przeciwnym razie nie znajdzie pliku klasy i nie wyrzuci Force close.

Edytuj plik Mainactivity.java

crate button's object;

teraz Napisz kod zdarzenia kliknięcia.

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

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

Mam nadzieję, że to zadziała.

Chintan Khetiya
źródło
czy to się dzieje w układzie czy w .java?
Henry Aspden
ok, możesz umieścić ten kod w zdarzeniu kliknięcia przycisku w pliku main 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);       
    }  
});

Odpowiedź na kompletnego nooba z kompletnego nooba: MainActivityto nazwa pierwszej czynności. MainActivity2to nazwa drugiej czynności. button1to identyfikator przycisku w XML dla MainActivitydziałania.

iAmNotVeryGoodAtThis
źródło
1
tylko po to, by pomóc innym… przez „nazwę przycisku” odnosisz się do ID?
Henry Aspden,
W rzeczy samej . Poprawione, aby odzwierciedlić Twoją rekomendację
iAmNotVeryGoodAtThis
5

po prostu wykonaj ten krok (nie piszę kodu tylko Bcoz, możesz kopiować i wklejać i nie mogę się nauczyć).

  1. najpierw musisz zadeklarować przycisk, który masz w układzie

  2. Podaj odniesienie do tego przycisku, znajdując jego identyfikator (używając findviewById) w oncreate

  3. setlistener dla przycisku (jak setonclick listener)

  4. ostatnia obsługa zdarzenia kliknięcia (oznacza rozpoczęcie nowej czynności przy użyciu zamiaru, jak już wiesz)

  5. Nie zapomnij dodać aktywności w pliku manifestu

Przy okazji, to jest po prostu proste. Chciałbym zasugerować, że po prostu zacznij od prostych tutoriali dostępnych w sieci, które będą dla Ciebie lepsze.

Powodzenia dla Androida

Kalpesh Lakhani
źródło
3

Zastąp poniższy kod linii:

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

Dodaj poniższe wiersze do pliku manifestu:

   <activity android:name="com.packagename.FromActivity"></activity>
   <activity android:name="com.packagename.ToActivity"></activity>
Avadhani Y
źródło
3

Zastąp plik MainActivity.class tym kodem

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

Dodaj ten kod w swoim AndroidManifest.xml After </activity>i Before</application>

<activity android:name=".SendPhotos"></activity>
Vikalp Patel
źródło
2

To zawsze działa, albo jedno powinno być w porządku:

@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);
        }
    }
}
Tobi Akerele
źródło
2

dodaj poniższy kod do pliku 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" />

i po prostu dodaj poniższą metodę do pliku MainActivity.java:

public void buttonClick(View view){
  Intent i = new Intent(getApplicationContext()SendPhotos.class);
  startActivity(i);
}
Md Nakibul Hassan
źródło
Masz literówkę, znak zapytania przed nazwą pliku
Mathieu VIALES
Przepraszam za pomyłkę
Md Nakibul Hassan
1

Jeśli masz dwa przyciski i masz ten sam identyfikator, wywołuje takie zdarzenia jak to:

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

        }
    });

Po kliknięciu button1, button2będzie działać i nie można otworzyć drugą aktywność.

Serdar Günaydın
źródło
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" />

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

}

Rana Umerfarooq
źródło
1

Możesz przejść do żądanej czynności po kliknięciu przycisku. po prostu dodaj
android: onClick = "timerApp" w tej linii.

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

W swojej głównej aktywności po prostu dodaj tę metodę:

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

LUB w metodzie onCreate () dodaj poniższy kod

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);       
    }  
});
Sani Kamal
źródło