ในแอปพลิเคชัน Android คุณจะเริ่มกิจกรรมใหม่ (GUI) อย่างไรเมื่อคลิกปุ่มในกิจกรรมอื่นและคุณส่งข้อมูลระหว่างกิจกรรมทั้งสองนี้อย่างไร
ในแอปพลิเคชัน Android คุณจะเริ่มกิจกรรมใหม่ (GUI) อย่างไรเมื่อคลิกปุ่มในกิจกรรมอื่นและคุณส่งข้อมูลระหว่างกิจกรรมทั้งสองนี้อย่างไร
คำตอบ:
ง่าย.
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"/>
CurrentActivity.this.startActivity(myIntent)
และstartActivity(myIntent)
?
สร้างเจตนาต่อกิจกรรม ViewPerson และส่งผ่าน PersonID (สำหรับการค้นหาฐานข้อมูลเป็นต้น)
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
จากนั้นในกิจกรรม ViewPerson คุณจะได้รับชุดข้อมูลพิเศษตรวจสอบให้แน่ใจว่ามันไม่เป็นโมฆะ (ในบางครั้งถ้าคุณไม่ส่งข้อมูล) จากนั้นรับข้อมูล
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
ตอนนี้ถ้าคุณต้องการแบ่งปันข้อมูลระหว่างสองกิจกรรมคุณสามารถมี Global Singleton ได้
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
คำตอบปัจจุบันดีมาก แต่จำเป็นต้องมีคำตอบที่ครอบคลุมมากขึ้นสำหรับผู้เริ่มต้น มี 3 วิธีในการเริ่มต้นกิจกรรมใหม่ใน Android และพวกเขาทั้งหมดใช้Intent
คลาส เจตนา พัฒนา Android
onClick
คุณสมบัติของปุ่ม (เริ่มต้น)OnClickListener()
ผ่านคลาสที่ไม่ระบุชื่อ (กลาง)switch
คำสั่ง (มือโปร)นี่คือลิงค์ไปยังตัวอย่างของฉันหากคุณต้องการติดตาม:
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" />
ในคลาส 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);
}
ข้อได้เปรียบ : ง่ายต่อการทำในทันทีโมดูลาร์และสามารถตั้งค่าหลายonClick
s เป็นเจตนาเดียวกันได้อย่างง่ายดาย
ข้อเสีย : อ่านง่ายเมื่อตรวจสอบ
OnClickListener()
คลาสที่ไม่ระบุชื่อ (กลาง)นี่คือเมื่อคุณตั้งค่าแยกต่างหากsetOnClickListener()
สำหรับแต่ละรายการbutton
และแทนที่แต่ละรายการonClick()
ด้วยเจตนาของตัวเอง
ในคลาส 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);}
});
ข้อได้เปรียบ : ง่ายต่อการทำได้ทันที
ข้อเสีย : จะมีคลาสที่ไม่ระบุชื่อจำนวนมากซึ่งจะทำให้อ่านง่ายเมื่อตรวจสอบ
switch
คำสั่ง (มือโปร)นี่คือเมื่อคุณใช้switch
คำสั่งสำหรับปุ่มของคุณภายในonClick()
วิธีการจัดการปุ่มทั้งหมดของกิจกรรม
ในคลาส 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;
}
ข้อได้เปรียบ : การจัดการปุ่มง่าย ๆ เพราะปุ่มทั้งหมดมีการลงทะเบียนในonClick()
วิธีการเดียว
สำหรับส่วนที่สองของคำถามการส่งผ่านข้อมูลโปรดดูที่ฉันจะส่งผ่านข้อมูลระหว่างแอพพลิเคชั่นใน Android ได้อย่างไร
เมื่อผู้ใช้คลิกที่ปุ่มโดยตรงภายใน 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);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
เอ็มมานู,
ฉันคิดว่าควรใส่ข้อมูลเพิ่มเติมก่อนเริ่มกิจกรรมมิฉะนั้นข้อมูลจะไม่สามารถใช้ได้หากคุณเข้าถึงในวิธี onCreate ของ NextActivity
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
จากกิจกรรมการส่งให้ลองใช้รหัสต่อไปนี้
//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"
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
ลองวิธีง่ายๆนี้
startActivity(new Intent(MainActivity.this, SecondActivity.class));
คุณสามารถลองรหัสนี้:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
วิธีเริ่มต้นกิจกรรมใหม่คือการถ่ายทอดเจตนาและมีความตั้งใจเฉพาะประเภทที่คุณสามารถใช้เพื่อส่งผ่านข้อมูลจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง คำแนะนำของฉันคือการที่คุณตรวจสอบเอกสารนักพัฒนา Android ที่เกี่ยวข้องกับเจตนา ; มันเป็นความมั่งคั่งของข้อมูลในหัวเรื่องและมีตัวอย่างด้วย
กิจกรรมแรก
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"))
การเริ่มต้นกิจกรรมจากกิจกรรมอื่นเป็นสถานการณ์ที่พบได้บ่อยในหมู่แอปพลิเคชัน Android
ในการเริ่มกิจกรรมคุณต้องมีวัตถุเจตนา
วัตถุเจตนาใช้สองพารามิเตอร์ในตัวสร้าง
ตัวอย่าง:
ตัวอย่างเช่นถ้าคุณมีสองกิจกรรมพูดHomeActivity
และDetailActivity
และคุณต้องการเริ่มต้นDetailActivity
จากHomeActivity
(HomeActivity -> DetailActivity)
นี่คือข้อมูลโค้ดที่แสดงวิธีเริ่ม DetailActivity จาก
HomeActivity
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);
}
});
เริ่มกิจกรรมอื่นจากกิจกรรมนี้และคุณสามารถส่งพารามิเตอร์ผ่าน 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");
ใช้อินเตอร์เฟส ViewOnClickListener และแทนที่เมธอด 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;
}
แม้ว่าจะมีคำตอบที่เหมาะสม แต่ฉันมาที่นี่เพื่อค้นหาคำตอบในภาษา Kotlin คำถามนี้ไม่ได้เกี่ยวกับภาษาเฉพาะดังนั้นฉันกำลังเพิ่มรหัสเพื่อให้งานนี้สำเร็จในภาษา Kotlin
นี่คือวิธีที่คุณทำเช่นนี้ใน Kotlin สำหรับ Andorid
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)
}
วิธีที่ง่ายที่สุดในการเปิดกิจกรรมเมื่อคลิกปุ่มคือ:
onclick
ฟังก์ชัน 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>
ใช้ปุ่มเป็น 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"
/>
ทำ listner ของปุ่ม
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
เมื่อคลิกปุ่ม:
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
}
เขียนรหัสในกิจกรรมแรกของคุณ
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");
วิดเจ็ตปุ่มสถานที่ในรูปแบบ xml ด้านล่าง
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
หลังจากนั้นเริ่มต้นและจัดการกับผู้ฟังคลิกในกิจกรรมเช่นด้านล่าง ..
ในกิจกรรมที่สร้างวิธี:
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);
}
});