TabHost
을 사용하는 Android 애플리케이션 (1.6 호환성)을 업그레이드하기 위해 노력하고 있습니다. 중첩 된 활동과 함께 3 개의 다른 탭을 표시합니다.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