Tôi mới bắt đầu sử dụng Android và tôi đang phát triển ứng dụng Android nhỏ. Trong ứng dụng của tôi, tôi đang sử dụng thư viện Sherlock. Ứng dụng của tôi chứa một hoạt động chính và hai đoạn. Về cấu trúc đoạn danh sách của tôi trông giống nhưonCreateOptionsMenu được gọi trước khi bậtTạo android
public class MyCards extends SherlockListFragment
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside fragment on create");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on activity created");
}
private void displayCards(int type) {
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside display cards");
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mycards, container, false);
View view1 = inflater.inflate(R.layout.empty_card, container, false);
return view;
}
/*@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
optionsMenu = menu;
}*/
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_type2, menu);
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on create option menu");
Spinner spinner = (Spinner) menu.findItem(R.id.cardType)
.getActionView();
SpinnerAdapter adapter = ArrayAdapter.createFromResource(getSherlockActivity().getSupportActionBar().getThemedContext(), R.array.card_action_list,android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter); // set the adapter
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
displayCards(pos);
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on option selected");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
displayCards(0);
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on no option selection");
}
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside option select listener");
}
}
Bây giờ vấn đề của tôi là khi tôi chuyển sang fro một đoạn khác đoạn cho lần đầu tiên nó mang lại cho dữ liệu ghi nhận sau
01-04 00:54:06.997: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on create option menu
01-04 00:54:06.997: W/KeyCharacterMap(2575): No keyboard for id -1
01-04 00:54:06.997: W/KeyCharacterMap(2575): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-04 00:54:07.020: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside fragment on create
01-04 00:54:07.036: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on activity created
Đó có nghĩa là trên tạo tùy chọn được gọi trước khi tạo và tạo hoạt động. và nó cũng đưa ra hai cảnh báo. Điều này làm việc với bất kỳ lỗi nào. Nhưng tôi không thể hiển thị danh sách điểm của tôi
Bây giờ khi tôi lại chuyển sang cùng một đoạn (đối với lần thứ hai) nó mang lại sau dữ liệu ghi nhận
02-07 10:05:10.983: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on create option menu
02-07 10:05:11.023: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside fragment on create
02-07 10:05:11.043: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on activity created
02-07 10:05:11.113: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside display cards
02-07 10:05:11.133: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on option selected
thời gian này nó không đưa ra bất kỳ cảnh báo và hoạt động đúng. Đồng thời hiển thị chế độ xem danh sách của tôi. Nhưng lần đầu tiên nó không hoạt động bình thường .. Một điểm khác là khi tôi chạy nó trên phiên bản cao hơn của android làm việc tốt của nó. Nhưng nếu tôi chạy nó trên phiên bản thấp hơn của android như 2.3.3 tôi cho thấy hành vi như vậy .. Tôi đọc về điều này ListFragment onPrepareOptionsMenu called before onCreate. Why and How to Fix/Bypass? Nhưng tôi không thể giải quyết vấn đề này.
nếu tôi xác định setHasOptionsMenu(true)
bên onActivityCreated
nó mang lại cho sản lượng sau
01-04 03:32:38.622: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside fragment on create
01-04 03:32:38.653: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on activity created
01-04 03:32:38.692: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on create option menu
01-04 03:32:38.700: W/KeyCharacterMap(8157): No keyboard for id -1
01-04 03:32:38.700: W/KeyCharacterMap(8157): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
Tôi cũng đã cố gắng để thiết lập setHasOptionsMenu cho đoạn của tôi, nơi giao dịch đoạn thực tế diễn ra như dưới đây ..
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
MyCards mc = new MyCards();
mc.setHasOptionsMenu(true);
ft = mActivity.getSupportFragmentManager().beginTransaction();
mFragment = Fragment.instantiate(mActivity, mClass.getName(),
mArgs);
ft.add(android.R.id.content, mFragment, mTag);
ft.commit();
}
và vẫn còn đó đưa ra cùng một vấn đề.
bất kỳ sự cố nào với mã của tôi hoặc một số thứ khác? Vì vậy, làm thế nào để giải quyết vấn đề này. Cần giúp đỡ ... cảm ơn bạn ...
Bạn có chắc chắn không phải vì bạn đang gọi 'setHasOptionsMenu' trước khi thực hiện đăng nhập onCreate? – Zharf
Hi zharf cảm ơn bạn đã trả lời. xem câu hỏi của tôi edited .. và thay đổi đầu ra đăng nhập .. Nhưng điều này không giải quyết vấn đề của tôi .. – nilkash