2012-10-22 23 views
7

Xin chào các bạn, tôi đang làm việc trên một Ứng dụng Android, nơi tôi muốn triển khai Nhóm hoạt động cho mỗi tab. Nhưng vì Nhóm Hoạt động không được chấp nhận nên tôi phải sử dụng Phân đoạn. Tôi googled những ngày cuối cùng và đã làm một số nghiên cứu về chủ đề đó nhưng tôi vẫn không nhận được nó. Hình dưới đây mô tả những gì tôi muốn làm. Ngoài ra tôi đang đến thẳng từ iOS và tôi cần một số phản hồi về lý thuyết của tôi.Android Fragment vs. Activity Group

enter image description here

Như bạn có thể thấy mọi Fragment bao gồm một WebView Fragment. Khi người dùng nhấp vào một liên kết trong phần WebView Fragment đó - yêu cầu bị bắt và Fragment mới được thay thế, một lần nữa giữ một WebView và tải liên kết đã được nhấp vào trong Fragment trước đó. Tại một điểm người dùng quyết định quay trở lại Fragment đầu tiên và nhấn nút quay lại.

Các phân đoạn sẽ bật ra khỏi ngăn xếp theo thứ tự ngược lại cho đến khi anh ta nhìn thấy lần đầu tiên. Lý tưởng nhất là mỗi mảnh nên lưu instancestate của mình, để khi người dùng quay trở lại WebView không cần phải tải lại trang web.

Tôi đã xem ActionBar Sherlock cung cấp một ví dụ về Tab phân đoạn. Ngoài ra còn có một ví dụ về một ngăn xếp phân đoạn. Sẽ rất lý tưởng khi kết hợp hai ví dụ này để mỗi tab bao gồm một Ngăn xếp phân đoạn.

đang cấu trúc của tôi trông giống như sau:

My TabHost Fragment

public class MyActivity extends SherlockFragmentActivity { 
static TabHost mTabHost; 
static TabManager mTabManager; 

public static int THEME = R.style.Theme_Sherlock_Light; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(THEME); //Used for theme switching in samples 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.fragment_tabs); 
    mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent); 

    // adding some Fragment Tabs 
    mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]), 
       FragmentStackSupport.CountingFragment.class, bundle); 


    if (savedInstanceState != null) { 
     mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
    } 
} 


@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
} 



// defining the Tab Manager 

Làm thế nào sẽ là Fragment Stack cho mỗi Tab nên xem xét như thế nào? Hiện tại tôi có Hoạt động phân đoạn với Phân đoạn bên trong mỗi tab. Nhưng tôi không đạt được logic mà tôi cần.

Đây là mã của tôi: (? Hay là có bất kỳ ví dụ trên web) My Fragment with WebView inside

Tôi sẽ vui mừng đối với một số thông tin phản hồi và gợi ý. Tôi cũng có một số lo ngại về bộ nhớ - khi người dùng nhấp chuột và nhấp chuột và nhấp chuột và bộ nhớ phải giữ từng Phân đoạn trong ngăn xếp.

Chúc mừng.

+5

+1 cho câu hỏi được giải thích rõ ràng. –

+0

bạn đã bao giờ tìm thấy một giải pháp vững chắc cho vấn đề này? –

Trả lời

1

Tôi không thể nghĩ ra nhiều lý do chính đáng để tạo phân đoạn mới mỗi lần người dùng nhấp vào liên kết. Có lý do nào khiến bạn đang cố gắng làm điều đó không? Nếu bạn chỉ trả về false từ shouldOverrideUrlLoading() thay vì tạo một đoạn mới, WebView sẽ tải trang mới và nếu bạn muốn quay lại, bạn có thể sử dụng các phương thức canGoBack() và goBack(). Để xử lý các lần nhấn nút quay lại, bạn có thể ghi đè onKeyDown trong hoạt động của mình và thực hiện như sau:

if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() { 
     myWebView.goBack(); 
     return true; 
    } 
+0

Cảm ơn bạn đã trả lời. Tôi đồng ý rằng nó là tối ưu nhưng tôi có lý do của tôi. Mặc dù tôi nghĩ rằng tôi sẽ làm theo lời khuyên của bạn - nó dễ dàng hơn nhiều. Tuy nhiên, tôi quan tâm đến cách người ta sẽ triển khai ngăn xếp phân đoạn cho mỗi tab. –

+0

Vâng, kể từ khi bạn hỏi, tôi chắc chắn nó không phải là một ý tưởng tuyệt vời, nhưng bạn chỉ có thể có một Stack (hoặc cấu trúc dữ liệu khác) của Fragments cho mỗi tab. Mỗi lần người dùng nhấp vào liên kết, hãy thêm phân đoạn vào Ngăn xếp của tab đó (bạn sẽ không muốn thêm bất kỳ Mảnh vỡ nào vào hậu trường của ứng dụng vì lý do hiển nhiên). Sau đó, nắm bắt nút quay lại và xem liệu ngăn xếp của tab hiện đang hiển thị có trống không và nếu có, tab tiếp theo sẽ được hiển thị trong tab chính xác. – ajpolt

+0

Có thể có một hoạt động riêng biệt trên mỗi tab và sau đó mỗi hoạt động sẽ có các phân đoạn riêng của nó? – tbkn23