Reputation: 803
App should download data and feed it into listFragment obj, but it does it only for first item "Today" in ActionBar Dropdown List. When I'm choosing second item "Soon" app crashes with error.
03-21 14:53:05.272: E/AndroidRuntime(5289): FATAL EXCEPTION: main
03-21 14:53:05.272: E/AndroidRuntime(5289): java.lang.IllegalStateException: commit already called
I understand that calling commit()
more than once creates that error, but without commit data is not displayed on screen. Please help me, I don't know how to solve it. Any help will be appreciated.
public class MainActivity extends Activity {
ParkFragment mFragment;
ParkFragment mFragment2;
FragmentTransaction transaction = getFragmentManager().beginTransaction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] actions = new String[] {"Today","Soon"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, actions);
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
if (actions[itemPosition] == "Today"){
if (mFragment2 != null){transaction.detach(mFragment2);}
if (mFragment == null){
mFragment = new ParkFragment("url1",MainActivity.this);
transaction.add(android.R.id.content, mFragment);
transaction.commit();
}else{
transaction.attach(mFragment);
transaction.commit();
}
}
if (actions[itemPosition]== "Soon"){
if (mFragment != null){transaction.detach(mFragment);
System.out.println("Detached");}
if (mFragment2 == null){
mFragment2 = new ParkFragment("url2",MainActivity.this);
transaction.add(android.R.id.content, mFragment2);
transaction.commit();
}else{
transaction.attach(mFragment2);
transaction.commit();
}
}
return true;
}
};
actionBar.setListNavigationCallbacks(adapter, navigationListener);
}
Upvotes: 0
Views: 518
Reputation: 7892
Make your FragmentTransaction
a local variable and not a member variable.
PSUEDO:
if (...) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
//add.. do stuff
transaction.commit();
} else {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
//add.. do stuff
transaction.commit();
}
Upvotes: 3