Như tên đề xuất.
Tôi đã tải xuống Fragment
mã từ đây, http://developer.android.com/shareables/training/FragmentBasics.zip.
Đây là ví dụ về Phân đoạn từ Trang web chính thức dành cho nhà phát triển Android. http://developer.android.com/training/basics/fragments/fragment-ui.htmlAndroid Fragment getArguments() trả về null
Đây là 's onCreate()
:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
// Check whether the activity is using the layout version with
// the fragment_container FrameLayout. If so, we must add the first fragment
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create an instance of ExampleFragment
HeadlinesFragment fragment = new HeadlinesFragment();
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
//fragment.setArguments(getIntent().getExtras());
Bundle args= new Bundle();
args.putString("category", "clothes");
args.putString("item", "shirts");
fragment.setArguments(args);
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment).commit();
}
}
Và HeadlinesFragment.java
' MainActivity.java
s onCreate()
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// We need to use a different list item layout for devices older than Honeycomb
int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
Bundle args = getArguments();
if (args == null) {
Toast.makeText(getActivity(), "arguments is null " , Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "text " + args , Toast.LENGTH_LONG).show();
}
// Create an array adapter for the list view, using the Ipsum headlines array
setListAdapter(new ArrayAdapter<String>(getActivity(), layout, Ipsum.Headlines));
}
Tôi đã đọc nhiều QA ở đây, như thế này Fragment getArguments() returns null, và nhiều khác liên quan đến setArguments()
và , nhưng tôi vẫn bị kẹt.
Và tôi đã chuyển mã Bundle
và Toast
-onAttach()
và onCreateView()
với vô ích. Có gì sai với mã của tôi? Tôi nghĩ rằng tôi đang thiếu một cái gì đó, nhưng dunno nó là gì.
Vui lòng trợ giúp! Cảm ơn.
Chỉnh sửa:
Tôi sẽ nêu rõ ý định của mình rõ ràng hơn. Trong FragmentBasic mà tôi đã tải xuống, có MainActivity.java, HeadlinesFragment.java và ArticlesFragment.java. 'Giao tiếp' từ MainActivity.java đến ArticlesFragment.java không phải là vấn đề ở đây. Điều tôi muốn là gửi dữ liệu từ MainActivity.java đến HeadlinesFragment.java. Kết nối của họ như sau:
--------------------------------------
| MainActivity <-> HeadlinesFragment |
| | |
| |>> ArticlesFragment |
--------------------------------------
Và HeadlinesFragment
đang chạy ở thời gian chạy.
* Các mã này hoạt động khi sử dụng tiện ích Android với chiều rộng < 600px. Nhưng không hoạt động khi sử dụng trên máy tính bảng (> = 600px), Như đã được chứng minh bởi @ Tesla1984 bên dưới. Nhưng những gì tôi muốn là kết quả tương tự hoặc trên tiện ích < 600px và trên tiện ích> 600px.
Tôi đã kiểm tra mã và 'getArguments()' không phải là rỗng. nếu mã ở trên là mã thực sự của bạn, tôi không nghĩ rằng có điều gì đó sai. nếu không, hãy kiểm tra các biến? – tesla1984
@ tesla1984: bạn nhập mã vào phần nào? trong HeadlinesFragment.java hoặc ArticlesFragment.java? Nguyên nhân Bất cứ nơi nào tôi đặt 'getArguments()' trong HeadlinesFragment.java, tôi nhận được null. Cảm ơn. – tonny
Một số lần nhật thực + ADT của tôi không thành công! .. Tôi cần dọn dẹp dự án và chạy lại .. –