2013-05-16 3 views
0

tout le monde. Mon application s'est écrasée et je ne sais pas pourquoi. J'apprends récemment FragmentTransaction. Fondamentalement, activity_main.xml contient mon ActionBar avec deux onglets contenant deux fragments, BasicFragment et BFragment. Je veux que BasicFragment montre dynamiquement un fragment. Est-ce que quelqu'un peut m'éclairer ce qui a mal tourné ici? Je vous remercie.App s'est écrasé sur FragmentTransaction

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<LinearLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</LinearLayout> 

</LinearLayout> 

MainActivity.java:

public class MainActivity extends Activity { 

public static Context appContext; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    actionBar(); 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    BasicFragment fragmentee = new BasicFragment(); 
    fragmentTransaction.add(R.id.afrag_container, fragmentee); 
    fragmentTransaction.commit(); 
} 

private void actionBar() { 
    // TODO Auto-generated method stub 
    appContext = getApplicationContext(); 

    // ActionBar 
    ActionBar actionbar = getActionBar(); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    actionbar.setDisplayShowTitleEnabled(false); 

    ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A"); 
    ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B"); 

    Fragment PlayerFragment = new BasicFragment(); 
    Fragment StationsFragment = new BFragment(); 

    PlayerTab.setTabListener(new TabListener(PlayerFragment)); 
    StationsTab.setTabListener(new TabListener(StationsFragment)); 

    actionbar.addTab(PlayerTab); 
    actionbar.addTab(StationsTab); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_pow, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menuitem_search: 
     Toast.makeText(appContext, "search", Toast.LENGTH_SHORT).show(); 
     return true; 
    case R.id.menuitem_add: 
     Toast.makeText(appContext, "add", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 
    return false; 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); 
} 

}

classe TabListener implémente ActionBar.TabListener { fragment public Fragment;

public TabListener(Fragment fragment) { 
    this.fragment = fragment; 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    Toast.makeText(MainActivity.appContext, "Reselected!", 
      Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    ft.replace(R.id.fragment_container, fragment); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    ft.remove(fragment); 
} 

}

BasicFragment.java:

public class BasicFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.examplefragment, container, false); 
    return view; 
} 

}

afragment.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<FrameLayout 
    android:id="@+id/afrag_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout> 

examplefragment.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 

<Button android:id="@+id/butt1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="HI!" /> 

</LinearLayout> 
+0

où gonflez-vous le afragment.xml dans le programme – vinoth

+0

Bonjour, vinoth. Je suis désolé si cela semble stupide, mais où devrais-je gonfler afragment.xml? Je pensais qu'écrire fragmentTransaction.add (R.id.afrag_container, fragment) suffirait. – Mnemone

+0

la mise en page afragment.xml rien à voir avec votre projet basé sur les informations que vous avez fournies il suffit de changer le R.id.afrag_container à R.id.fragment_container. – vinoth

Répondre

1

Dans votre activité principale, vous essayez d'accéder à une disposition linéaire qui se trouve dans afragment.xml, de même que l'erreur. L'activité principale affiche la disposition activity_main.xml, remplacez le afrag_container par fragment_container (disposition linéaire) qui se trouve dans activity_main.xml.

+0

Bonjour, je viens de mettre à jour mon MainActivity.java Comme vous pouvez le voir, fragment_container est utilisé par ActionBar pour héberger ses onglets.Je veux juste inclure dynamiquement un autre fragment dans BasicFragment mais je ne peux pas le faire Désolé si je suis stupide, mec Je ne sais pas quoi faire – Mnemone

+0

Je viens de réaliser que j'ai initialisé BasicFragment sur l'actionBar(): Est-ce que c'est ce que je fais de mal? – Mnemone

Questions connexes