Androidにおける異なるパケット経路下のActivityジャンプの実現(ActivityNotFoundException解決)
初心者は異なるJavaパッケージディレクトリの下にあるActivity間のジャンプを試みていると、常に実行時にActivityNotFoundExceptionを得て、次は別のパッケージディレクトリの下でActivityジャンプの実現を見にきます。
まず、2つのActivity:Jummp TestActivityとJummp TestActivity 2を作成します。Jump TestActivityにはボタンがあります。ユーザが押すとJummp TestActivity 2にジャンプします。機能は簡単です。
まずJummp TestActivityのコードを実現します。hust.iprar.asce 1885パッケージの中にあります。
この時、質問があるかもしれませんが、この二つのActivityがあるカバンには関係が含まれていません。例えばJummp TestActivityはhust.iprai.asce 1885にありますが、Jummp TestActivity 2はhust.ipraw.wen 1885にあります。この時、maifestファイルはどう設定しますか?簡単です。相対パスが使えないなら、絶対パスを使いましょう。
まず、2つのActivity:Jummp TestActivityとJummp TestActivity 2を作成します。Jump TestActivityにはボタンがあります。ユーザが押すとJummp TestActivity 2にジャンプします。機能は簡単です。
まずJummp TestActivityのコードを実現します。hust.iprar.asce 1885パッケージの中にあります。
public class JumpTestActivity extends Activity {
private Button mButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent = new Intent();
mIntent.setClass(JumpTestActivity.this, JumpTestActivity2.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mIntent);
JumpTestActivity.this.finish();
}
});
}
}
続いてJmp TestActivity 2のコードを実現します。hust.iprar.asce1885 tmpパッケージの中にあります。public class JumpTestActivity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView mTextView = new TextView(this);
mTextView.setText("ASCE1885");
mTextView.setTextColor(Color.RED);
setContentView(mTextView);
}
}
ジャンプの鍵はAndroid Manifest.xmlファイルにあります。ファイルの内容は以下の通りです。<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hust.iprai.asce1885"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".JumpTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".tmp.JumpTestActivity2"></activity>
</application>
</manifest>
相対パスを使用する前提で、Jummp TestActivity 2の名前は.tmp.Jummp TestActivity 2の相対パッケージ名として書かれていなければなりません。他の形式で、例えばフルバック名.hust.iprar.asce1885 tmp.Jump TestActivity 2などは運行時にActivity NotFounctivity Exptionを取得します。その理由は簡単で、<maifest>のプロパティpackage=“hust.iprar.asce 1885”は、「maifest」の操作はhust.iprar.asce 1885に基づいて行われると明確に指摘しました。 . hust.iprai.asce 1885に対して説明します。この時、質問があるかもしれませんが、この二つのActivityがあるカバンには関係が含まれていません。例えばJummp TestActivityはhust.iprai.asce 1885にありますが、Jummp TestActivity 2はhust.ipraw.wen 1885にあります。この時、maifestファイルはどう設定しますか?簡単です。相対パスが使えないなら、絶対パスを使いましょう。
<activity android:name="hust.iprai.wen1885.JumpTestActivity2" />