EDIT:bố trí với mảnh và framelayout thay thế bằng đoạn khác và framelayout
Vì vậy, sau những ý kiến dưới đây, tôi revisted và nhận ra những gì đã treo tôi lên.
Hãy tưởng tượng danh sách khách hàng của tôi và các hoạt động chi tiết của khách hàng được bắt đầu bởi:
public class ClientsMainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//StudioTabOpenHelper db;
setContentView(R.layout.main_client_activity);
}
}
Vì vậy, các công trình vĩ đại này, khởi động main_client_Activity của tôi (được định nghĩa trong một bố cục bên dưới, và tôi gọi hoạt động này khi một nút trên chính của tôi màn hình được nhấp):
Intent intent = new Intent(getActivity(), ClientsMainActivity.class);
startActivity(intent);
Dễ vấn đề là, ClientsMainActivity
không gọi một OnCreateView hoặc bất cứ điều gì, chỉ cần đặt bố cục để bố trí định nghĩa Fragment của tôi, và ListFragment tôi. Điều này là tốt vì tôi không cố gắng để vượt qua bất cứ điều gì vào ClientsMainActivity
, nhưng nếu tôi có một hoạt động giả định như:
SessionMainsActivity
được gọi khi họ nhấp vào chỉnh sửa phiên của khách hàng, thì tôi sẽ không gọi SessionsMainActivity
cùng một cách (bắt đầu hoạt động mà chỉ cần đặt để alayout), tôi sẽ muốn rằng bố trí thiết lập như nó xác định cách phân đoạn của tôi được chia ra. Nhưng tôi cũng muốn chuyển dữ liệu đến đó và sau đó đến các đoạn tiếp theo (như phiên mà họ đã nhấp vào để chỉnh sửa/mucking với.
Vì vậy, tôi tự hỏi liệu điều trên có ý nghĩa không, tôi chắc chắn nó đơn giản Tôi không có vấn đề gì khi gọi điện thoại của tôi, tôi không có vấn đề gì khi gọi FragmentActivitie
s từ các mảnh khác, chúng chiếm toàn bộ màn hình nhưng nó hoạt động.Vì vậy, tôi đoán vấn đề lớn là ClientsMainActivity
là từ một số ví dụ tôi tìm thấy trực tuyến Điều làm tôi thấy tất cả những gì mà FragmentActivity
thực hiện là đặt chế độ xem nội dung thành bố cục thực hiện tất cả công việc, vì vậy đó là lý do tại sao tôi không thể tìm ra cách tôi sẽ mã hóa nó làm điều tương tự nhưng hãy để tôi chuyển các giá trị cho các mảnh mà bố cục xác định, v.v.
END EDIT
Vì vậy, tôi đang sử dụng thoải mái chút hướng dẫn này ở đây:
http://developer.android.com/guide/topics/fundamentals/fragments.html
Nó đã gạt tôi một chặng đường dài và sử dụng những gì họ nói để làm cho các hoạt động chính, và fragment_layout.xml, tôi có một danh sách khách hàng tốt đẹp ở bên trái (Thats a listfragment) và một đoạn chi tiết bên phải.
Sau đó, tôi đã thêm khả năng chỉnh sửa thông tin phiên trên máy khách (hoặc chỉnh sửa chi tiết khách hàng) cả hai đều là các đoạn toàn màn hình. Điều này làm việc tuyệt vời.
Bây giờ tôi đã quyết định Chỉnh sửa phiên của mình ui tốt nhất sẽ được phân phát chia nhỏ thông tin thành hai ô một lần nữa.
này không được làm việc như tôi nghĩ, như tôi đã nói tôi có một main_Activity mà thực hiện điều này trong onCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_client_activity);
}
với main_client_activity.xml
được quy định tại hai bố trí nhưng một cho máy tính bảng phong cảnh ở đây:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.viciousbytes.studiotab.subactivities.ClientListView"
android:id="@+id/client_list" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/client_details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground"/>
</LinearLayout>
Tất cả đều hoạt động tuyệt vời! Trong trường hợp mà tôi xử lý mọi thứ khác như một hoạt động toàn màn hình mà bắt đầu đoạn riêng của mình:
EditSessionActivity
EditClientActiivyt
cả hai đều sử dụng getSupportFragmentManager() beginTransaction và tôi có thể chuyển thông tin vào nó từ cuộc gọi .newInstance..
Tôi đã bố trí session_edit.xml
được xác định bằng các nút, bản xem trước văn bản, v.v. và đã hoạt động tốt. Đó là những gì tôi tải trong đoạn SessionEdit
của tôi "đưa ra" bởi EditSessionActivity
của tôi Nhưng bây giờ kể từ khi tôi muốn chia nó ra tôi chạy vào một snag. Ở trên tôi đã định nghĩa một client_list và một id client_details, các trình giữ chỗ này trên màn hình của tôi? Tôi có tham khảo những điều đó khi tôi muốn thay thế những gì ở đó với những mảnh hoàn toàn khác nhau không?
hoặc để tôi xây dựng một bố cục đoạn gọi là cái gì đó như fragment_session_layout trong đó xác định một cái gì đó như:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.viciousbytes.studiotab.subactivities.SessionEdit"
android:id="@+id/session_edit" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/invoice_details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
</LinearLayout>
Xin lỗi không biết những gì để danh hiệu này trên đầu lưỡi của tôi về những gì tôi đang hỏi, về cơ bản như thế nào để có hai mảnh vỡ hai lần. THe demo trực tuyến cho thấy làm thế nào để làm một (và một ListFragment đơn giản ở đó).
Tôi đã làm tất cả ở trên và tôi chỉ không thể tìm ra cách để vượt qua vào đoạn dữ liệu tôi cần, tôi đã sử dụng này trong EditSessionActivity tôi:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int clientID = getIntent().getIntExtra(THE_SELECTED_CLIENT, -1);
int sessionID = getIntent().getIntExtra(SELECTED_SESSION,-1);
SessionEdit edits = SessionEdit.newInstance(this.getBaseContext(), false, clientID, sessionID);
mUIListener = (OnUpdateUI)edits;
getSupportFragmentManager().beginTransaction().add(android.R.id.content, edits).commit();
}
mà làm việc, nhưng để cố gắng tuân thủ với ví dụ về đoạn trước đó, tôi giả định rằng EditSessionActivit
y của tôi đã được sắp xếp giống như tạo một MainActivity
khác (vì nó có hai ô trong đó giống như bảng chính). vì vậy tôi recoded các onCreate
trong EditSessionActivity
với điều này:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_session_fullview);
}
nào sau khi chiến đấu ở mảnh EditSession của tôi đối phó với onCreateView, tôi nhận này để cuối cùng làm việc nhưng không thể vượt qua trong các dữ liệu gây ra không có instantiation của đối tượng sử dụng như trước đây onCreate
có edits=SessionEdit.newInstance(...)
Vì vậy, thực hành tốt là thực hiện bố cục đoạn khác có hai điểm đau trong đó và bắt đầu lên khi hành động đúng được kích hoạt. Hoặc là một trong những nghĩa vụ phải thay thế hai mảnh đã được tạo ra ?? từ số main_client_activity.xml
của tôi bằng cách nào đó?
Tôi có cùng một "vấn đề" bây giờ, tôi đã có 2 listfragments trong xem và tôi đang thay đổi dinamically sau khi một hàng được chọn.Tôi nghĩ rằng rất nhiều cái nào là tốt hơn nhưng tôi không nghĩ rằng đây là cách tốt nhất mà tôi đã sử dụng. – kameny
Các ví dụ cho các đoạn trực tuyến này thường đủ cho các trường hợp đơn giản, nhưng nhiều hơn thế và bạn tự làm. Hy vọng rằng ai đó có một gợi ý tốt. – Codejoy
Tôi rất háo hức với bạn, hướng dẫn này tốt cho các tình huống cơ bản và nếu ai đó muốn tạo giao diện người dùng phức tạp với các mảnh mà anh ấy cần suy nghĩ rất nhiều: D – kameny