2012-04-28 13 views
0

新しいフラグメントAPIを使用してデュアルペインレイアウトを作成することで、タブレット向けのUIをアプリに追加することにしました。しかし、問題は、私のアプリの画面の多くがアクティビティサブクラスだということです。
- 約50のアクティビティがあります。
- 私は私のアプリは1.6
で始まるアンドロイドのすべてのバージョンと互換性がしたい - それは
あまりにも巨大であると、私はそれはできるだけ小さいようにしたいと思いますので、互換ライブラリを使用することはオプションではありませんフラグメント内でのアクティビティの開始

somequestions答えが不可能だとわかったが、私はほぼ成功した。ここにカスタムコードのコードを示します。

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()が呼び出されない、つまりアイテムをクリックする、別のアクティビティが現在のアクティビティから開始されますが、 。

+1

互換性ライブラリなしでフラグメントを使用することはできず、apkに〜110kbしか追加しません。 – zapl

+0

私はそれらを直接使用し、Honeycombでのみ有効にします。 – Grishka

+1

これは、フラグメントとして使用されるすべてのパーツに加えて、アクティビティのActivityFragmentsを作成する必要があることを意味します。つまり、apkのサイズも大きくなります。サポートライブラリを使用する利点はありません。 – zapl

答えて

0

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

関連する問題