【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のインタフェースレイアウトのコードは次のとおりです.
<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は含まなければならなくて、名前は勝手にカスタマイズすることができます;もう一つ大切なのは
を含める必要があります.さらに理解すれば、dataを構成することもでき、異なるパラメータを割り当てることで暗号が異なる情報を伝達し、複数のインタフェースの場合、暗号によってどのインタフェースを開くかによって、異なるデータを取得することができる.