M
Manuel1805
Ambitioniertes Mitglied
- 2
Hallo zusammen,
ich habe eine Frage, in meiner App verwende ich einen Navigationsdrawer. Mit diesem ersetze ich mein Fragment. Nun ist es aber so dass ich aus einem Fragment ein weiteres erzeuge. Das funktioniert auch ...
...aber mit dem Nachteil dass beim Neustart der App ein Fehler ausgeworfen wird. Die MainActivity kennt halt das Fragment nicht, wie kann ich den Fehler vermeiden / das Problem lösen? Kann ich beim Beenden der App ein anderes Fragment laden?
Fehlermeldung:
FATAL EXCEPTION: main
jo start activity ComponentInfo{de.manuel.buchenfueranfaenger/de.manuel.buchenfueranfaenger.MainActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment de.manuel.buchenfueranfaenger.Training: make sure class name exists, is public, and has an empty constructor that is public
Aus dieser Klasse (Fragment) starte ich ein weiteres Fragment:
Hier noch meine MainActivity:
ich habe eine Frage, in meiner App verwende ich einen Navigationsdrawer. Mit diesem ersetze ich mein Fragment. Nun ist es aber so dass ich aus einem Fragment ein weiteres erzeuge. Das funktioniert auch ...
...aber mit dem Nachteil dass beim Neustart der App ein Fehler ausgeworfen wird. Die MainActivity kennt halt das Fragment nicht, wie kann ich den Fehler vermeiden / das Problem lösen? Kann ich beim Beenden der App ein anderes Fragment laden?
Fehlermeldung:
FATAL EXCEPTION: main
jo start activity ComponentInfo{de.manuel.buchenfueranfaenger/de.manuel.buchenfueranfaenger.MainActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment de.manuel.buchenfueranfaenger.Training: make sure class name exists, is public, and has an empty constructor that is public
Aus dieser Klasse (Fragment) starte ich ein weiteres Fragment:
Code:
public class Uebungen extends Fragment {
String[] kapitel = new String[] { "Thema1", "Thema2",
"Thema3" };
ListView listView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.u_listview, container, false);
listView = (ListView) view.findViewById(R.id.lv1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this.getActivity(), android.R.layout.simple_list_item_1,
kapitel);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
fmAendern((byte) position);
}
});
return view;
}
[B]public void fmAendern(byte kapitelnummer) {
Fragment fragment = new Training(kapitelnummer);
FragmentManager fm = getFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, fragment).commit();[/B]
}
}
Hier noch meine MainActivity:
Code:
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
CustomDrawerAdapter adapter;
List<DrawerItem> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataList = new ArrayList<DrawerItem>();
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
dataList.add(new DrawerItem("Startseite", R.drawable.ic_start));
dataList.add(new DrawerItem("Thema1",
R.drawable.ic_sinn_und_zweck));
dataList.add(new DrawerItem("Thema2", R.drawable.ic_einstieg));
adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item,
dataList);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState != null) {
return;
} else {
SelectItem(0);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void SelectItem(int possition) {
Fragment fragment = null;
switch (possition) {
case 0:
fragment = new FragmentStartSeite();
break;
case 1:
fragment = new Kapitel1();
break;
case 2:
fragment = new Uebungen();
break;
...
default:
break;
}
FragmentManager frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, fragment)
.commit();
mDrawerList.setItemChecked(possition, true);
setTitle(dataList.get(possition).getItemName());
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title.toString().replace("- ", "");
getActionBar().setTitle(mTitle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return false;
}
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
SelectItem(position);
}
}
public void oeffneDrawer(View view) {
mDrawerLayout.openDrawer(mDrawerList);
}
@Override
public void onBackPressed() {
SelectItem(0);
}
}