新しいフラグメントAPIを使用してデュアルペインレイアウトを作成することで、タブレット向けのUIをアプリに追加することにしました。しかし、問題は、私のアプリの多くの画面がアクティビティサブクラスであるということです。それらすべてを手動でフラグメントに変換することは、次の理由によるオプションではありません。-
ほぼ50のアクティビティがあります。
-アプリを1.6以降のすべてのバージョンのAndroidと互換性を持たせ
たい-そして、アプリをできるだけ小さくしたいので、互換性ライブラリを使用することはできません。
不可能だと答える質問をいくつか 見つけましたが、ほぼ成功しました。これが私のカスタムフラグメントのコードです:
public static class ActivityFragment extends Fragment{
Intent intent;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(intent==null){
Bundle a=getArguments();
intent=a.getParcelable("intent");
}
LocalActivityManager am=((ActivityGroup)getActivity()).getLocalActivityManager();
Window wnd=am.startActivity("intent"+intent.hashCode(), intent);
if(view==null){
view=wnd.getDecorView();
view.setLayoutParams(new FrameLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
}
return view;
}
public void onDestroy(){
super.onDestroy();
if(!((TabletMainActivity)getActivity()).tabs.containsValue(this)){
((ActivityGroup)getActivity()).getLocalActivityManager().destroyActivity("intent"+intent.hashCode(), true);
}
}
}
動作させるには、ActivityGroupでのみ使用する必要があります。唯一の問題は、ListViewメソッドを使用する一部のアクティビティでは、アクティビティの再開後にonItemClick()が呼び出されないことです。つまり、アイテムをクリックすると、現在のアクティビティの上に別のアクティビティが開始されますが、戻ると、アイテムはクリックできなくなります。