Androidアプリケーションで、他のアクティビティのボタンがクリックされたときにどのようにして新しいアクティビティ(GUI)を開始するのですか。また、これら2つのアクティビティ間でデータをどのように渡しますか?
簡単です。
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"/>
ViewPersonアクティビティへのインテントを作成し、PersonIDを渡します(たとえばデータベースの検索用)。
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
それから、ViewPersonアクティビティで、余分なデータの束を取得し、それがnullでないことを確認してから(データを渡さない場合がある場合)、次にデータを取得します。
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
2つのアクティビティ間でデータを共有する必要がある場合は、グローバルシングルトンも使用できます。
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
現在の回答は素晴らしいですが、初心者にはより包括的な回答が必要です。 Androidで新しいアクティビティを開始するには3つの異なる方法があり、それらはすべてIntent
クラスを使用します。 Intent | Android Developers 。
onClick
属性を使用します。 (初心者)OnClickListener()
を割り当てる(中級)switch
ステートメントを使用したアクティビティ全体のインターフェースメソッド。 (プロ)あなたが一緒にフォローしたい場合は、ここに私の例へのリンクがあります: https://github.com/martinsing/ToNewActivityButtons
onClick
属性を使用します。 (初心者)ボタンには、.xmlファイル内にあるonClick
属性があります。
<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()
を代入します。 (中級)これは、各button
に個別のsetOnClickListener()
を設定し、各onClick()
を独自の意図でオーバーライドするときです。
Javaクラスの場合:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
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);}
});
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
ステートメントを使用したアクティビティ全体のインターフェースメソッド。 (プロ)これは、onClick()
メソッド内のボタンにswitch
ステートメントを使用して、アクティビティのすべてのボタンを管理するときです。
Javaクラスの場合:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
button1 = (Button) findViewById(R.id.button1);
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.
エマニュエル、
そうでなければ、NextActivityのonCreateメソッドでアクセスしている場合、データはまだ利用できないでしょう。
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
送信アクティビティから次のコードを試してください。
//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"
この簡単な方法を試してください。
startActivity(new Intent(MainActivity.this, SecondActivity.class));
あなたはこのコードを試すことができます:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
他のアクティビティからアクティビティを開始することは、Androidアプリケーションでは非常に一般的なシナリオです。
活動を始めるには Intent オブジェクトが必要です。
インテントオブジェクトはそのコンストラクタで two パラメータを取ります
例:
たとえば、HomeActivity
とDetailActivity
の2つのアクティビティがあり、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);
}
});
新しいアクティビティを開始する方法はインテントをブロードキャストすることです。あるアクティビティから別のアクティビティにデータを渡すために使用できる特定の種類のインテントがあります。私のお勧めは、 intents に関連する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"))
このアクティビティから別のアクティビティを開始すると、Bundle Objectを介してパラメータを渡すこともできます。
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);
別のアクティビティでデータを取得する(YourActivity)
String s = getIntent().getStringExtra("USER_NAME");
適切な答えはすでに提供されていますが、私は言語Kotlinで答えを検索するためにここにいます。この質問は言語固有のものではないので、このタスクを実行するためのコードをKotlin言語で追加しています。
これはandoridのためにKotlinでこれを行う方法です
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.Java)
startActivity(intent)
}
View.OnClickListenerインタフェースを実装し、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;
}
ボタンをクリックしたとき:
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
}
ボタンクリックでアクティビティを開く最も簡単な方法は次のとおりです。
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"
/>
ボタンのリスナーを作成します。
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
下のようにxmlでボタンウィジェットを配置する
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button"
/>
その初期化の後、以下のようにActivityでクリックリスナーを処理します。
アクティビティ作成時のメソッド:
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);
}
});
最初のアクティビティにコードを書きます。
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");