TabHost
を使って入れ子になった3つのタブを表示するAndroidアプリケーション(1.6互換)をアップグレードしようとしています。Android 1.6&Fragment&Tabhost
私はActivityGroup
トリックを使用してタブにネストされたアクティビティを表示しましたが、いくつかの機能を処理するのは本当の苦痛なので、このメソッドには非常に不満です。
私はFragments API互換パッケージ1.6について聞いたことがありますが、Fragment
は何をしたいのですか(トランジションエフェクトなどでタブ内にネストされたビュー/機能を表示する)には向いていますが、 TabHost
(これはAction Bar
で動作するようになっていますが、互換性パッケージでは利用できません)。
は君たちのいずれかが、あなたのアプリケーションでは、このような構造を作成する方法を発見しましたか?
私のエラーはここにある:
ERROR/AndroidRuntime(955): Caused by: java.lang.RuntimeException: Unable
が活動を開始する ComponentInfo {com.XXX} java.lang.IllegalArgumentExceptionが: フラグメントMyFragmentのID 0x1020011が見つかりません
図
コード
main.xml
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
</LinearLayout>
</TabHost>
MainActivity.java
public class MainActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources();
final TabHost tabs = getTabHost();
TabHost.TabSpec spec;
Intent i;
i = new Intent(this, MyActivity.class);
spec = tabs.newTabSpec("MyActivity").setIndicator("MyActivity",res.getDrawable(R.drawable.tab)).setContent(i);
tabs.addTab(spec);
}
}
MyActivity.class
public class MyActivity extends FragmentActivity {
private static String TAG = "MyActivity";
private static FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ListeResultatFragment fragment = MyFragment.newInstance();
fragmentTransaction.add(android.R.id.tabcontent, fragment, "MyFragment");
fragmentTransaction.commit();
}
}
MyFragment.java
public class MyFragment extends Fragment {
public static MyFragment newInstance() {
MyFragment instance = new MyFragment();
return instance;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
あなたは 'TabHost'に' FrameLayout'の子として ''要素を置くことができないと言っていますか?私はこれがうまくいくと思っていただろうが、私はまだそれを個人的に試していない。 –
CommonsWare
私が働いていないものを正確に説明してください。常にフラグメントをプログラムで追加できることを忘れないでください。 – oriharel
コードが追加されました:) – Vivi