Android->ダイナミックロードActivity(Intentを使用せずにActivityを起動)
主な内容:Intentを使用せず、Activityを起動する:宿主Activityを通じて、起動する必要があるActivityライフサイクルを引き継ぎ、目的を達成する;記事では、Java反射メカニズムを使用する可能性があります.
メインコード1:メインプログラム
2:ホストActivity,動的ロードが必要なActivityを起動し,ライフサイクルを引き継ぐ
3:ダイナミックロードが必要なActivityは、BaseActivityを継承する必要があります
4:ターゲットActivity、コードは簡単で、1行です
2つのレイアウトファイル:->1:activity_main.xml
–>2: second_layout.xml
補足:http://blog.csdn.net/singwhatiwanna/article/details/22597587
ソースのダウンロード:http://download.csdn.net/detail/angcyo/8770121
ここまで:文章は终わって、もし疑问があるならば:QQ群:274306954あなたの参加を歓迎します.
メインコード1:メインプログラム
MainActivity extends Activity
メインプログラムを通して、ホストActivityを起動するpublic void loadActivity(View view) {
Intent intent = new Intent(this, ProxyActivity.class);
startActivity(intent);
}
2:ホストActivity,動的ロードが必要なActivityを起動し,ライフサイクルを引き継ぐ
public class ProxyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { Class<?> localClass = SecondActivity.class; // Constructor<?> localConstructor = localClass .getConstructor(new Class[] {}); //
Object instance = localConstructor.newInstance(new Object[] {}); //
Method setProxy = localClass.getMethod("setProxy", new Class[] { Activity.class }); // ; onCreate ; Activity
setProxy.setAccessible(true); //
setProxy.invoke(instance, new Object[] { this }); //
Method onCreate = localClass.getDeclaredMethod("onCreate", new Class[] { Bundle.class }); // , onCreate
onCreate.setAccessible(true); //
onCreate.invoke(instance, new Object[] { new Bundle() }); // onCreate
} catch (Exception e) { e.printStackTrace(); }
}
}
3:ダイナミックロードが必要なActivityは、BaseActivityを継承する必要があります
public class BaseActivity extends Activity {
protected Activity mProxyActivity;
public void setProxy(Activity proxyActivity) { // ,
mProxyActivity = proxyActivity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);// : ,
}
@Override
public void setContentView(int layoutResID) { // , ;
if (mProxyActivity != null && mProxyActivity instanceof Activity) {
mProxyActivity.setContentView(layoutResID);
mProxyActivity.findViewById(R.id.button).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mProxyActivity, "Hello!",
Toast.LENGTH_LONG).show();
}
});
}
}
}
4:ターゲットActivity、コードは簡単で、1行です
public class SecondActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
}
}
2つのレイアウトファイル:->1:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:onClick="loadActivity" android:text=" " />
</RelativeLayout>
–>2: second_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text=" " />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" Activity,
Manifest.xml " />
</RelativeLayout>
補足:http://blog.csdn.net/singwhatiwanna/article/details/22597587
ソースのダウンロード:http://download.csdn.net/detail/angcyo/8770121
ここまで:文章は终わって、もし疑问があるならば:QQ群:274306954あなたの参加を歓迎します.