2012-03-01 23 views
7

Về cơ bản đây là ứng dụng (ý tưởng) của tôi cho định hướng ngang của máy tính bảng: Hai mảnh vỡ, mảnh trái là danh sách được điền bởi tệp resource.xml (Có hoạt động).Về mặt cơ bản, thêm phân đoạn vào nhóm

Đoạn phải được cho là tự động thay đổi phân đoạn và bố cục dựa trên mục danh sách mà người dùng nhấp vào. Googling cho đến nay đã nói với tôi rằng tôi cần phải thêm và xóa các đoạn mã theo cách lập trình vào một nhóm xem để thực hiện điều đó. Có đúng không?

Về cơ bản câu hỏi là/là:

  1. Làm thế nào để tạo ra các ViewGroup và ở đâu (Main.java hoặc menufragment.java)?
  2. Làm cách nào để đặt "ID người dùng nhấp 3 động" trên danh sách để thêm đoạn 3 vào nhóm xem "
  3. Tôi phải thêm gì vào tệp main.xml của mình? có mảnh vỡ cho listfragment trong đó, những gì để thêm cho các nhóm xem năng động?

EDIT:

Vì vậy, đây là những gì hoạt động của tôi trông giống như: Main.java

public class Main extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    } 
} 

Đây là listfragment tôi MenuFragment.java

public class MenuFragment extends ListFragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.listfragment, container, false); 

} 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    setListAdapter(new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, 
      getResources().getStringArray(R.array.listmenu))); 
    }  



    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
     Main activity = (Main) getActivity(); 
    } 


} 

và cuối cùng là main.xml của tôi

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<fragment 
    android:id="@+id/list" 
    android:layout_width="200dp" 
    android:layout_height="fill_parent" 
    android:layout_alignParentTop="true" 
    android:layout_weight="1" 
    class="com.mwerner.fragmentstest.MainMenu" /> 

<View 
    android:id="@+id/contentview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/list" /> 

</RelativeLayout> 

Mảng chuỗi i có trong file xml của tôi rằng phổ biến danh sách được gọi là "listmenu"

Tôi là một người mới bắt đầu. Plaese cho tôi biết nơi tôi cần phải đưa vào mã bạn đã viết xuống?

Cảm ơn, Max

+1

Một ViewGroup chỉ là một vùng chứa, như LinearLayout hoặc RelativeLayout. Nó sẽ được thêm vào tệp bố cục hoạt động (res/layout/activity.xml). Cung cấp cho ViewGroup một id và sau đó bạn có thể tham chiếu nó bằng phương thức 'findViewById'. – twaddington

Trả lời

7

Hãy nhìn vào các chủ đề này Fragment:

Về cơ bản bạn sẽ muốn có trái đoạn kể cha mẹ Hoạt động mục nào được chọn. Sau đó, Hoạt động có thể thêm/xóa phân đoạn chính xác trong ngăn phải.

Hãy nhớ rằng việc tạo/hủy Phân đoạn là rất nhiều công việc cho hệ thống. Nếu bạn có thể lấy đi với một Fragment duy nhất trong khung bên phải, nó sẽ hiệu quả hơn nhiều. Sau đó, bạn có thể gọi các phương thức trên một cá thể Fragment mà không cần tạo các Fragments mới.

EDIT (ví dụ):

của bạn Hoạt động thực hiện chính với phương pháp tùy chỉnh:

public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    /** Called by the left fragment */ 
    public void updateRightPane(long id) { 
     // Get the data with the selected item id 
     // ... 

     // Create a new fragment 
     MyFragment fragment = new MyFragment(data); 

     // Update the layout 
     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

     // The id specified here identifies which ViewGroup to 
     // append the Fragment to. 
     ft.add(R.id.view_group_id, fragment); 
     ft.commit(); 
    } 
} 

Các onListItemClick thực hiện cho MenuFragment.java:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    // Get the parent Activity 
    Main activity = (Main) getActivity(); 

    // Pass the selected item id to the Activity method 
    // Note: Feel free to update this method to accept additional 
    //  arguments (e.g. position). 
    activity.updateRightPane(id); 
} 

Cuối cùng, bố trí tập tin của bạn:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/view_group_id" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <!-- More views here... --> 

</RelativeLayout> 
+0

Cảm ơn, chỉ cần followup: 1) làm thế nào để tôi nói onlistitemclick trong listfragment của tôi để thay đổi khung nhìn bên phải để tải một mảnh và bố trí? 2) Tôi không cần phải phá hủy các mảnh vỡ, tôi chỉ có thể đặt chúng ở phía sau nếu nó dễ dàng hơn trên bộ nhớ. Về cơ bản tôi muốn chỉ có một "DetailsFragment" được hiển thị bên phải, cụ thể là người cuối cùng người dùng nhấp vào trong danh sách. – Killerpixler

+1

ListFragment của bạn có phương thức [getActivity] [1]. Bạn có thể viết một phương thức công khai trên máy chủ Hoạt động chấp nhận một số đối số và sẽ thay đổi khung bên phải khi được gọi. Gọi 'getActivity' từ trình lắng nghe onListItemClick của Fragment bên trái của bạn và đưa kết quả đó vào loại Activity cha. Sau đó, gọi phương thức công khai của bạn. Một cái gì đó như 'updateDetailsPane (long id)' sẽ hoạt động. 'MyActivity activity = (MyActivity) getActivity(); ' [1]: http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29 – twaddington

+0

Tôi đã đăng mã của mình trong bản chỉnh sửa, tôi hiểu một cách hợp lý những gì bạn nói nhưng không hiểu cách thực hiện nó. Xin vui lòng giúp đỡ: S – Killerpixler

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