Tôi đang làm việc để nâng cấp ứng dụng Android (1.6 khả năng tương thích) sử dụng TabHost
để hiển thị 3 tab khác nhau có hoạt động lồng nhau.Android 1.6 & Fragment & Tabhost
Lúc đó tôi đã sử dụng thủ thuật ActivityGroup
để hiển thị các hoạt động lồng nhau trong tab nhưng tôi rất không hài lòng với phương pháp này vì đó là một nỗi đau thực sự để xử lý một số tính năng.
Tôi đã nghe về gói tương thích API Fragments cho 1.6 và Fragment
trông hoàn hảo cho những gì tôi muốn làm (hiển thị các chế độ xem/tính năng lồng nhau trong tab có hiệu ứng chuyển tiếp và nội dung) nhưng tôi không thể làm việc với TabHost
(Nó có nghĩa là để làm việc với một Action Bar
nhưng nó không có sẵn trong gói tương thích).
Có ai trong số các bạn đã tìm thấy cách tạo cấu trúc như vậy trong các ứng dụng của mình không?
lỗi của tôi ở đây là:
ERROR/AndroidRuntime(955): Caused by: java.lang.RuntimeException: Unable
để bắt đầu hoạt động ComponentInfo {com.XXX}: java.lang.IllegalArgumentException: Không xem tìm thấy cho id 0x1020011 cho đoạn MyFragment
CODE
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);
}
}
Bạn có nói rằng bạn không thể đặt các phần tử '' là con của 'FrameLayout' trong' TabHost'? Tôi đã có thể mong đợi điều này để làm việc, nhưng tôi đã không thử nó cá nhân nào được nêu ra. –
CommonsWare
hãy giải thích chính xác những gì tôi không làm việc. Hãy nhớ rằng bạn luôn có thể thêm các đoạn lập trình. – oriharel
Mã đã thêm guys :) – Vivi