6

Je suis en train sur la barre d'action android 3.0, où je me réfère àAndroid Tab Barre d'action

http://www.youtube.com/watch?v=gMu8XhxUBl8

Le code dans le TabsActivity sont les suivantes:

package com.test.actionbar; 

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 

public class TabsActivity extends Activity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    Fragment fragmentA = new AFragmentTab(); 
    Fragment fragmentB = new BFragmentTab(); 
    Fragment fragmentC = new CFragmentTab(); 

    tabA.setTabListener(new MyTabsListener(fragmentA)); 
    tabB.setTabListener(new MyTabsListener(fragmentB)); 
    tabC.setTabListener(new MyTabsListener(fragmentC)); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 

} 

protected class MyTabsListener implements ActionBar.TabListener { 

    private Fragment fragment; 

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

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     ft.add(R.id.fragment_container, fragment, null); 

    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 
    } 
} 

pour une tutoriel étape par étape, cependant, après avoir terminé le tutoriel, j'ai réalisé que dans la TabsActivity, dans la méthode onTabSelected, il faudra une variable qui est le container_id, dont je ne sais pas trop comment puis-je fournir cela même après avoir regardé le api. J'ai essayé d'enlever la ligne et l'ai courue sur la tablette mais elle me jette une exception d'exécution.

Quelqu'un peut-il m'aider avec ceci?

Désolé, je suis nouveau à la programmation Android, si la question semble trop simple.

Merci d'avance.

EDIT

import android.app.ActionBar; 
import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 

public class ActionBarTabs extends Activity { 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 
    } 
} 

MISE À JOUR

package com.debug.actionbartabs; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.os.Bundle; 

public class TabsActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    bar.addTab(tabA); 

    } 
} 

Répondre

12

Chacune des classes devrait ressembler à ceci:

public class AFragmentTab extends Fragment 
{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
    return inflater.inflate(R.layout.fragment_a, container, false); 
    } 
} 

Et l'activité principale devrait ressembler à ceci:

package com.test.actionbar; 

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 

public class TabsActivity extends Activity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    Fragment fragmentA = new AFragmentTab(); 
    Fragment fragmentB = new BFragmentTab(); 
    Fragment fragmentC = new CFragmentTab(); 

    tabA.setTabListener(new MyTabsListener(fragmentA)); 
    tabB.setTabListener(new MyTabsListener(fragmentB)); 
    tabC.setTabListener(new MyTabsListener(fragmentC)); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 

} 

protected class MyTabsListener implements ActionBar.TabListener { 

    private Fragment fragment; 

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

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.add(R.id.fragment_container, fragment, null); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // some people needed this line as well to make it work: 
     ft.remove(fragment); 
    } 
} 

Je viens de découvrir la copie de son code ici: http://www.abelski.com/courses/android3ui/actionbar.pdf> _ < Ainsi, dans le main.xml ressemble à ceci:

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

@Jonathon Ho merci pour votre réponse. suis-je supposé déclarer l'id quelque part? parce que je ne suis pas trop sûr où devrais-je le faire. J'ai lu le guide du développeur, mais je n'arrive toujours pas à comprendre le concept. cela vous dérange si vous pouvez me guider à où je devrais ajouter des choses telles que je peux l'avoir travailler? –

+0

Oh, je l'ai édité en ce moment, oups. Je suis sûr que vous mettez l'ID dans votre fichier fragment xml. Les fragments peuvent être lus ici: http://developer.android.com/reference/android/app/Fragment.html Mais ouais, c'est dans le quel que soit le nom de votre identifiant . Il est transmis au R.java généré automatiquement afin que vous puissiez l'utiliser dans votre code Java. Avez-vous déjà essayé de créer des formulaires Android avec des vues XML? Cela devrait ressembler à ça. – rawreth

+0

@Jonathan Ho J'ai essayé d'utiliser la mise en page xml avant, mais cette fois-ci, il continue d'obtenir des erreurs comme ne peut pas faire référence à la classe, que j'ai changé, mais il est écrasé. –