0

新しいフラグメント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()が呼び出されないことです。つまり、アイテムをクリックすると、現在のアクティビティの上に別のアクティビティが開始されますが、戻ると、アイテムはクリックできなくなります。

4

1 に答える 1

0

onResumeの前後のすべてのListViewのフィールドの値を比較することで、最終的に解決策を見つけました。notifyDataSetInvalidated()そして、この問題の解決策は、リストアダプタのメソッドを呼び出すことです。

于 2012-04-29T13:50:31.000 に答える