AndroidはIntentでページジャンプを実現

6310 ワード

Intentメッセージング
IntentがAndroidの各コンポーネント間のジャンプを支援
1、
startActivity(intent)
パッケージの下に新しいクラスを作成します.class
public class FActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.factivity);
    }
}

XMLファイルfactivityを新規作成xml
<Button
    android:id="@+id/bt1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="First"/>
<Button
    android:id="@+id/bt2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Second"/>
<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_gravity="center"
    />

同様に、2番目のclassとxmlのペアを作成します.
AndroidManiFestに2つの新しいクラスを登録し、デフォルトの起動クラスを一番前にします.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bcp.layouttest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

ボタンイベントを追加:
public class FActivity extends AppCompatActivity {
    private Button bt_first;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.factivity);
        /***
         *              
         */

        bt_first= (Button) findViewById(R.id.bt1);
        bt_first.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
                Intent intent=new Intent();
                //   :     
                //   :    
                intent.setClass (FActivity.this,SActivity.class);
                startActivity(intent);
            }
        });
    }
}

2、
startActivityForResult(intent,requestCode);
onActivityResult(int requestCode,int resultCode,Intent data)
setResult(resultCode,data);
コードの表示:
FActivity.java
public class FActivity extends AppCompatActivity {
    private Button bt_first;
    private Button bt_second;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.factivity);
        /***
         *              
         */

        bt_first= (Button) findViewById(R.id.bt1);
        bt_first.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                intent.setClass (FActivity.this,SActivity.class);
                startActivity(intent);
            }
        });

        /***
         *   startActivityForresult  
         */
        bt_second= (Button) findViewById(R.id.bt2);
        bt_second.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent().setClass(FActivity.this,SActivity.class);
                /***
                 *            
                 */

                startActivityForResult(intent,1);
            }
        });

        tv= (TextView) findViewById(R.id.text1);
    }

    /***
     *   startActivityForresult  ,         
     *  、     
     *  、          
     *  、          
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //               
        if(requestCode==1&&resultCode==2){
            String content=data.getStringExtra("intent");
            tv.setText(content);
        }
    }
}

SActivity.java
public class SActivity extends AppCompatActivity{
    private Button bt;
    private String content="Hello~!";
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sactivity);

        /***
         *                
         *                intent  
         */
        bt= (Button) findViewById(R.id.bt3);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                //      
                intent.putExtra("intent",content);
                setResult(2,intent);

                //      
                finish();
            }
        });


    }
}

Appの署名とパッケージ:
1、各アプリケーション開発者の合法性を保証するため.
2、同じPackage Nameでインストールしたプログラムを混同して、悪意のある改ざんが発生しないようにする
3、リリースごとの一貫性を保証する(バージョンが異なるため、自動更新がインストールできない場合)