Android uygulamasında düğmeye tıklayarak ikinci bir etkinlik nasıl açılır


96

Android uygulamaları oluşturmayı öğreniyorum ve bazı özel yardıma ihtiyacım var. Hangi şablon kod bitlerini değiştirmem gerektiği ve hangi bitlerin statik olduğu konusunda kafamı kurcalamıyorum.

Gelen DÜZENİ benim sahip klasör ACTIVITY_MAIN.XML okur

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

Sonra, ACTIVITY_SEND_PHOTOS.XML adlı ikinci etkinliğim var:

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

Daha sonra MainActivity.java'm var (bu .class mı?) Bu com.example.assent.bc paketini okuyor;

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

ve sonra SendPhotos.java dosyam olan;

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

 }

Ana etkinliğimdeki düğmenin fotoğraf gönderme etkinliğime bağlanmasını istiyorum, basitçe o etkinliği açıyor, süslü bir şey değil, herhangi bir veri veya herhangi bir şey göndermiyorum.

Biliyorum bir yerde ihtiyacım var

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

ancak ToActivity.class'ı neyle değiştireceğim veya başka neye nerede ihtiyacım olduğu hakkında hiçbir fikrim yok .



1
ToActivity.class, ikinci etkinlik adınızdır
Niranj Patel

Bu sizin için en iyi kaynak olabilir
Usama Sadiq

Amaç sınıfı, iki sınıfı bağımsız değişken olarak kabul eden herhangi bir kurucuya sahip değildir !. ne yapmalıyım?
Emad Ağayi

Yanıtlar:


156

Düğme tıklamasıyla istediğiniz aktiviteye gidebilirsiniz. sadece bu satırı ekleyin.

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

Ana faaliyetinize şu yöntemi ekleyin:

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

Ve en önemli şey: aktivitenizi tanımlamayı unutmayın. manifest.xml

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

3
Sen eklemelisiniz >etkinlik etiketinde
Mageek

2
Bu benim için çalışmıyor. View, IntentVe etkinlik adları kırmızı ile belirtilmiştir. View için herhangi bir şeyi içe aktarmam gerekir mi?
Srujan Barai

1
@SrujanBarai evet, her ikisi de android.view.View içe aktarılır; ve android.content.Intent'i içe aktarın; ithal edilmelidir
William Reed

Benim için iyi çalıştı. Ancak düğmesinde bir setOnClickListener () kullanması gerekmiyor mu?
Evaggelos Manousakis

1
@VaggelisManousakis zaten xml'de olduğu için gerekli değilandroid:onClick="sendMessage"
Juned

30

Bunu dene

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

 }

ama nerede? Her yerde hatalar alıyorum Bunu
.java'yı

@HenryAspden onclocklistener ve Button içe aktarın.
JD

@HenryAspden bu kodu onCreate'den sonra ve kimliğinizi bulduktan sonra koydu.
JD

@HenryAspden Kodumu düzenledim şimdi bunu deneyin. Bu kodu onCreate'e koydum, bu şekilde deneyin.
JD

11

Etkinlikten: şu anda neredesin?

Aktiviteye: nereye gitmek istersiniz?

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

Her iki Etkinlik de bildirim dosyasına dahil edilmelidir, aksi takdirde sınıf dosyasını bulamaz ve Kapatmaya zorla atmaz.

Mainactivity.java dosyanızı düzenleyin

crate button's object;

şimdi tıklama etkinliği için kod yazın.

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

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

Umarım sizin için çalışacaktır.


bu, düzen veya .java içinde mi?
Henry Aspden

tamam bu kodu ana activity.java dosyasındaki düğmenin tıklama etkinliğine koyabilirsiniz
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);       
    }  
});

Tam bir çaylaktan tam çaylak için cevap: MainActivityilk etkinliğin adıdır. MainActivity2ikinci aktivitenin adıdır. Etkinlik button1için xml'deki düğmenin kimliğidir MainActivity.


1
başkalarına yardım etmek için ... "düğmenin adı" ile kimliği mi kastediyorsunuz?
Henry Aspden

Aslında .
Tavsiyenizi

5

sadece bu adımı izleyin (kod yazmıyorum, sadece kopyalayıp yapıştırabilirsiniz ve öğrenemezsiniz Bcoz) ..

  1. Öncelikle, düzeninizde sahip olduğunuz bir düğmeyi belirtmeniz gerekir

  2. Oncreate'de onun kimliğini bularak (findviewById kullanarak) bu düğmeye referans verin

  3. düğme için setlistener (setonclick dinleyicisi gibi)

  4. son olarak tıklama olayını işleyin (zaten bildiğiniz gibi amacı kullanarak yeni aktivite başlatmak anlamına gelir)

  5. Manifest dosyasına aktivite eklemeyi unutmayın

BTW bu çok basit, size internette bulunan basit eğitimlerden başlamanın sizin için daha iyi olacağını önermek isterim ..

Android için en iyi şans


3

Aşağıdaki satır kodunu değiştirin:

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

Aşağıdaki satırları manifest dosyanıza ekleyin:

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

3

MainActivity.class'ınızı bu kodla değiştirin

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

Bu Kodu öğenizin AndroidManifest.xml arkasına </activity>ve Öncesine ekleyin</application>

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

2

Bu her zaman işe yarar, ya biri iyi olmalı:

@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 dosyasına aşağıdaki kodu ekleyin:

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

ve aşağıdaki yöntemi MainActivity.java dosyasına ekleyin:

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

Dosyanın adının önünde bir yazım hatası, soru işareti var
Mathieu VIALES

Hata için özür dilerim
Md Nakibul Hassan

1

İki düğmeniz varsa ve düğmeniz için aynı kimlik çağrısı varsa, bunun gibi tıklama olayları:

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

        }
    });

Tıkladığınız zaman button1, button2çalışacak ve siz ikinci aktiviteyi açamıyor.


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

JAVA KODU İLE

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

Düğme tıklamasıyla istediğiniz aktiviteye gidebilirsiniz. sadece ekle
bu satıra android: 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" />

Ana faaliyetinize şu yöntemi ekleyin:

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

VEYA onCreate () yönteminde aşağıdaki kodu ekleyin

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);       
    }  
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.