2013-05-24 38 views
13

I am newbie trong việc sử dụng những mảnh android .Tôi có một kịch bản Hãy để tôi giải thích nó tôi đã nhậnAndroid Nested Fragment Cách tiếp cận

  1. Hoạt động chính kéo dài FragmentActivity hoạt động chính .My bao gồm hai Những mảnh vỡ
  2. Lựa chọn Danh sách đó kéo dài Fragment
  3. chi tiết Danh sách mở rộng Fragment
  4. chi tiết mô tả mà kéo dài Fragment

Khi tôi khởi động hoạt động chính của tôi. Nó sẽ bao gồm Danh sách tùy chọn trong Fragment 1 & Chi tiết danh sách trong Fragment 2. Sau đó, tôi chọn một mục từ Danh sách chi tiết. Sau đó, Mô tả của nó phải được nạp vào Fragment 2 của hoạt động chính

Xem hình ảnh này

enter image description here

tôi không nhận được một ý tưởng làm thế nào để đạt được điều này. Tôi có nghĩa là làm thế nào tôi có thể nói mảnh danh sách chi tiết để tải chi tiết mô tả mảnh bên trong hoạt động chính. Ngoài ra khi tôi bấm lại nút tôi phải quay trở lại giai đoạn đầu tức là

enter image description here

EDIT:

gì tôi đã làm được việc tạo ra một giao diện (Listener) bên trong mảnh vỡ và thực hiện nó đối với hoạt động của bố mẹ tôi . Nhưng nếu có 10 mảnh khác nhau, tôi cần thực hiện tất cả các giao diện trong hoạt động của cha mẹ. Vì vậy, có cách nào khác để đạt được điều này?

Trả lời

0

Trong hoạt động phân đoạn của bạn, bạn có thể sử dụng 2 hàm chứa (ví dụ 2 Linearlayouts) - để điều hướng bên trái (Danh sách tùy chọn) và nội dung phù hợp của bạn. Sau đó, bạn cần một chức năng công cộng như public void switchFragmentInContainer(Fragment f, int position) mà bạn tải một đoạn mới để chứa của bạn ...

Trong OptionList của bạn, bạn gọi hàm này như ((FragmentActivity) getActivity).switchFragmentInContainer(NEWFRAGMENT, FragmentActivity.RIGHT);.

Tôi hy vọng đây là những gì bạn đã tìm kiếm.

0

Theo http://developer.android.com/guide/components/fragments.html#Adding

// Create new fragment and transaction 
Fragment newFragment = new ExampleFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

Bạn cũng có thể cần:

public class MainActivity extends FragmentActivity { 
    ... 
    public void onArticleSelected(Uri articleuri) { 
     //use data to add the new fragment 
    } 
    ... 
} 

public static class FragmentA extends ListFragment { 
    OnArticleSelectedListener mListener; 

    // Container Activity must implement this interface 
    public interface OnArticleSelectedListener { 
     public void onArticleSelected(Uri articleUri); 
    } 
    ... 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (OnArticleSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener"); 
     } 
    } 
    ... 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // Append the clicked item's row ID with the content provider Uri 
     Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id); 
     // Send the event and Uri to the host activity 
     mListener.onArticleSelected(noteUri); 
    } 
    ... 
} 
+0

Tôi nghĩ rằng đây là từ blog của nhà phát triển biểu mẫu bài viết. Tôi đã trải qua điều đó. Những gì tôi đã làm là thực hiện các giao diện trong hoạt động chính của tôi để tải các phần con. Tôi muốn biết là có cách nào tốt hơn để tiếp cận nó. Bạn có cần mã nguồn của những gì tôi đã làm? – edwin

+0

Mã trợ giúp vì tôi không chắc chắn những gì bạn đang yêu cầu. Những gì tôi đã cung cấp cho bạn trực tiếp từ developer.android.com tài liệu chính thức. Nếu một mảnh liên quan đến hoạt động này, đây là cách bạn sẽ tải nó. Nếu một đoạn không liên quan đến hoạt động này thì hãy bắt đầu một hoạt động mới. –

3

Những điều cần luôn luôn ghi nhớ khi phát triển các mảnh vỡ là nó cần một giao diện người dùng để cho nó được hiển thị. Bạn cần một vị trí trong bố trí của bạn, nơi bạn muốn các mảnh được.Có hai cách để làm điều đó:

  • Tạo một lớp Fragment và khai báo chúng trong bố cục như dưới đây.

    Ở đây chúng tôi giả định rằng chúng tôi đã tạo một đoạn ArticleListFragment và ArticleReaderFragment.

    <fragment 
        android:id="@+id/list" 
        android:name="com.example.news.ArticleListFragment" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="1" /> 
    
    <fragment 
        android:id="@+id/viewer" 
        android:name="com.example.news.ArticleReaderFragment" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="2" /> 
    

    Nhược điểm của việc này là bạn không thể thay đổi điều này trong thời gian chạy, có nghĩa là khi ứng dụng của bạn đang thực hiện bạn không thể thay thế một mảnh với nhau. Nếu bạn có để hiển thị hai mảnh ví dụ bạn phải khai báo hai trong bố trí của bạn và ẩn một trong hai. May mắn là có một cách khác.

  • Lập trình thêm đoạn của bạn theo thời gian khi chạy. Trong cách tiếp cận này, bạn phải khai báo một layout trước và chắc chắn để thêm một container (LinearLayout, RelativeLayout, vv), nơi bạn sẽ đặt đoạn. Ví dụ:

    <ListView 
        android:id="@id/options_list" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="1" > 
    </ListView> 
    
    <LinearLayout 
        android:id="@id/detail_layout" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="2" 
        android:orientation="vertical" > 
    </LinearLayout> 
    

Ở đây tôi định nghĩa một options_list danh sách lựa chọn của bạn và một bố cục detail_layout nơi bạn cần sẽ đưa các chi tiết. Bây giờ khi chạy khi một tùy chọn được nhấp bạn hiển thị các chi tiết mảnh trên detail_layout như:

ExampleFragment fragment = new ExampleFragment(); 
getFragmentManager().beginTransaction().add(R.id.detail_layout, fragment).commit(); 

Để thay thế đoạn đó với nhau:

Fragment newFragment = new AnotherExampleFragment(); 
getFragmentManager().beginTransaction().replace(R.id.detail_layout, newFragment).addToBackStack(null).commit(); 

Thông báo cuộc gọi đến addToBackStack. Điều này là cần thiết để khi người dùng nhấn Back, phần trước sẽ được hiển thị.

Tôi nghĩ bạn có thể tìm ra từ đây. :)

+0

thực sự tôi đã trải qua bài viết bạn đã đề cập. Những gì tôi đã làm là thực hiện các giao diện trong hoạt động chính của tôi để tải các phần con. Tôi muốn biết là có cách nào tốt hơn để tiếp cận nó. Bạn có cần mã nguồn của những gì tôi đã làm? – edwin

Các vấn đề liên quan