【Android開発-9】情報時代、ActivityとActivityはどのように交流しますか
8655 ワード
前言:情報時代には、古代人のように鳩を飛ばして本を伝える必要はありません.メール、微信、QQ、微博は自分の親愛なる友达と迅速にコミュニケーションすることができます.このような目まぐるしい情報時代には、自分に合ったコミュニケーションツールを選ぶ必要があります.AndroidのActivityとActivityの間の伝達方法もいろいろありますが、プロジェクトでどのように情報のインタラクション方法を選ぶかは、プロジェクトのニーズと自分の経験次第です.
例を作る前に1つのことを理解する必要があります:Intent;
本の上でとネット上で见た概念の解釈はすべてとても多くて、しかし私はその英文の意味が好きです:意図.君の意図は何をしようとしているのか,それを言っておけばいい.例えば私がパラメータを渡すと、あなたはこのIntentで設定を終えて、2番目のインタフェースにあなたが設定した意図的なパラメータを通じて、解析することができます.たとえば、インタフェースを開くことを意図している場合は、Intentで開くインタフェースパラメータを設定し、メソッドで呼び出すことができます.あるいはもっと簡単な説明は伝達の役割を果たすことです!
実戦理解を開始する:
1.新規項目:Activity Intent
2.前編に基づき、別のインタフェースを作成し、作成したファイルは:activity_first.xmlとFirstActivity
activity_first.xmlのインタフェースレイアウトのコードは次のとおりです.
メインインタフェースレイアウトのファイルコードは次のとおりです.
3.新しいインタフェースレイアウトをプログラムに追加し、AndroidManifestを修正する.xml、ノードの前に次のように追加します.
4.エントリコードの作成MainActivityは以下の通りです.
4.別のインタフェースのビジネスコードFirstActivityを作成するには、次のようにします.
実戦効果:
注意:
1.簡単に理解すると、第1種は主にintentで直接パラメータを意図の中に入れる.2つ目はbundleでパラメータをパッケージ化して意図に入れる.3つ目はstartActivity ForResultでパラメータを返すインタフェースを意図的に開くことです.
2.資料から分かるように、AndroidManifestでインタフェースを暗黙的に開く方法もある.xml構成リストにintent-filterを配置してフィルタリングを意図し、俗点は暗号を与えることである.それからプログラムの中でこの暗号をあげて、複数のインタフェースの時、この暗号によってAndroidManifestにあります.xml構成では、対応する起動インタフェースが見つかります.
a.AndroidManifestを修正します.xml、ノードの前にコンテンツを追加するには、次のように変更します.
b.MainActivityで起動したインタフェースコードは以下のように変更された.
c.暗号情報の中で重要なのはactionで、intent-filterは含まなければならなくて、名前は勝手にカスタマイズすることができます;もう一つ大切なのは
を含める必要があります.さらに理解すれば、dataを構成することもでき、異なるパラメータを割り当てることで暗号が異なる情報を伝達し、複数のインタフェースの場合、暗号によってどのインタフェースを開くかによって、異なるデータを取得することができる.
例を作る前に1つのことを理解する必要があります:Intent;
本の上でとネット上で见た概念の解釈はすべてとても多くて、しかし私はその英文の意味が好きです:意図.君の意図は何をしようとしているのか,それを言っておけばいい.例えば私がパラメータを渡すと、あなたはこのIntentで設定を終えて、2番目のインタフェースにあなたが設定した意図的なパラメータを通じて、解析することができます.たとえば、インタフェースを開くことを意図している場合は、Intentで開くインタフェースパラメータを設定し、メソッドで呼び出すことができます.あるいはもっと簡単な説明は伝達の役割を果たすことです!
実戦理解を開始する:
1.新規項目:Activity Intent
2.前編に基づき、別のインタフェースを作成し、作成したファイルは:activity_first.xmlとFirstActivity
activity_first.xmlのインタフェースレイアウトのコードは次のとおりです.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/close_1"
android:layout_below="@id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" "
/>
</RelativeLayout>
メインインタフェースレイアウトのファイルコードは次のとおりです.
<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"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/Open_1"
android:layout_below="@id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Intent ( )"
/>
<Button
android:id="@+id/Open_2"
android:layout_below="@id/Open_1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Intent ( )"
/>
<Button
android:id="@+id/Open_3"
android:layout_below="@id/Open_2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Intent ( )"
/>
</RelativeLayout>
3.新しいインタフェースレイアウトをプログラムに追加し、AndroidManifestを修正する.xml、ノードの前に次のように追加します.
<activity
android:name=".FirstActivity"
android:label="@string/app_name" >
</activity>
4.エントリコードの作成MainActivityは以下の通りです.
package com.wyz.activityintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button intentBtn = (Button)findViewById(R.id.Open_1);
Button intentBtn_2 = (Button)findViewById(R.id.Open_2);
Button intentBtn_3 = (Button)findViewById(R.id.Open_3);
intentBtn.setOnClickListener(new BtnListener());
intentBtn_2.setOnClickListener(new BtnListener());
intentBtn_3.setOnClickListener(new BtnListener());
}
class BtnListener implements OnClickListener {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, FirstActivity.class);
switch(v.getId())
{
case R.id.Open_1: //
intent.putExtra("name", "wyz_1_");
intent.putExtra("age", 18);
startActivity(intent);
break;
case R.id.Open_2: //
Bundle bundle = new Bundle();
bundle.putString("name", "wyz_2_");
bundle.putInt("age", 27);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.Open_3: //
intent.putExtra("name", "wyz_3_");
intent.putExtra("age", 35);
startActivityForResult(intent, 0);
break;
default:
break;
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 0) // startActivityForResult(intent, 0);
{
if(resultCode == 1) // setResult(1, resultIntent);
{
String sRet = data.getStringExtra("return");
Toast.makeText(getApplicationContext(), sRet, Toast.LENGTH_LONG).show();;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
4.別のインタフェースのビジネスコードFirstActivityを作成するには、次のようにします.
package com.wyz.activityintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class FirstActivity extends Activity {
int iType=0; // , 0
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
EditText text = (EditText)findViewById(R.id.text);
Button close_btn = (Button)findViewById(R.id.close_1);
close_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(iType == 3) // ,
{
Intent resultIntent = new Intent();
resultIntent.putExtra("return", "Hello wyz");
setResult(1, resultIntent);
FirstActivity.this.finish();
}
else
{
FirstActivity.this.finish();
}
FirstActivity.this.finish();
}
});
Intent intent = getIntent();
String sName = intent.getStringExtra("name");
//int iAge = intent.getIntExtra("age", 0); //
int iAge = intent.getExtras().getInt("age"); //
String sAge = String.valueOf(iAge);
text.setText(sName+sAge); //
if(sName.compareTo("wyz_3_") == 0)
{
iType = 3;
}
}
}
実戦効果:
注意:
1.簡単に理解すると、第1種は主にintentで直接パラメータを意図の中に入れる.2つ目はbundleでパラメータをパッケージ化して意図に入れる.3つ目はstartActivity ForResultでパラメータを返すインタフェースを意図的に開くことです.
2.資料から分かるように、AndroidManifestでインタフェースを暗黙的に開く方法もある.xml構成リストにintent-filterを配置してフィルタリングを意図し、俗点は暗号を与えることである.それからプログラムの中でこの暗号をあげて、複数のインタフェースの時、この暗号によってAndroidManifestにあります.xml構成では、対応する起動インタフェースが見つかります.
a.AndroidManifestを修正します.xml、ノードの前にコンテンツを追加するには、次のように変更します.
<activity
android:name=".FirstActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.wyz.open_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
b.MainActivityで起動したインタフェースコードは以下のように変更された.
intent.setAction("android.wyz.open_1");
// , intent Intent.CATEGORY_DEFAULT
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
c.暗号情報の中で重要なのはactionで、intent-filterは含まなければならなくて、名前は勝手にカスタマイズすることができます;もう一つ大切なのは