Ich bin Anfänger auf Android und ich entwickle kleine Android-Anwendung. In meiner Anwendung verwende ich die Sherlock-Bibliothek. Meine Anwendung enthält eine Hauptaktivität und zwei Fragmente. Auf meiner Strukturliste Fragment sieht aus wieonCreateOptionsMenu zuvor onCreate 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");
}
}
Nun mein Problem ist, dass, wenn ich fro ein Fragment zu einem anderen Fragmente für erstes Mal einschalten es folgende Protokollausgabe
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
dieser Option bedeuten, auf erstellen gibt aufgerufen vor onfragment create und on activity create. und es gibt auch zwei Warnungen. Dies funktioniert ohne Fehler. Aber ich bin nicht in der Lage zu meiner Liste Ansicht
nun angezeigt wird, wenn ich wieder zu gleichem Fragmente wechseln (zum zweiten Mal) es folgende Protokollausgabe gibt
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
diesmal ist es keine Warnung geben und ordnungsgemäß funktioniert. Zeigt auch meine Listenansicht an. Aber zum ersten Mal funktioniert es nicht richtig .. Ein weiterer Punkt ist, dass wenn ich es auf höhere Version von Android lief es gut funktioniert. Aber wenn ich es auf der niedrigeren Version von Android wie 2.3.3 lief, zeige ich solches Verhalten. Ich lese darüber ListFragment onPrepareOptionsMenu called before onCreate. Why and How to Fix/Bypass? Aber ich bin nicht in der Lage, dieses Problem zu lösen.
wenn ich definieren setHasOptionsMenu(true)
innerhalb onActivityCreated
es folgende Ausgabe
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
gibt, gebe ich auch versucht setHasOptionsMenu für mein Fragment zu setzen, wo tatsächliche Fragment Transaktion wie unten nimmt ..
@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();
}
und es immer noch gibt das gleiche Problem.
ein Problem mit meinem Code oder etwas anderes? So, wie man dieses Problem löst. Benötigen Sie Hilfe ... danke ...
Sind Sie sicher, dass es nicht ist, weil Sie 'setHasOptionsMenu' aufrufen, bevor Sie onCreate anmelden? – Zharf
Hi zarf Danke für die Antwort. sehe meine bearbeitete Frage .. und änderte Log-Ausgabe .. Aber das löst mein Problem nicht. – nilkash