Bonjour J'ai du mal à changer la vue visuelle de l'activité du fragment. J'ai créé tous les onglets mais onClick je ne sais pas comment passer l'activité dans cet espace blanc.Android comment interagir avec les onglets Fragment
http://i40.tinypic.com/22bwxx.png
de sorte que la structure de c'est une activité simple nommée Main
qui définit simplement le point de vue du contenu d'un document maintabholder.xml
qui détient la vue fragment qui se connecte à une classe nommée MainNav
dont la vue le contenu contient tous les onglets le fond.
maintabholder.xml
:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<include layout="@layout/header" android:layout_alignParentTop="true" android:id="@+id/headerArea"></include>
<fragment
class="my.package.name.MainNav"
android:id="@+id/fragment_tabs"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
MainNav.java code snippet
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
mRoot = inflater.inflate(R.layout.fragment_tabs, null);
mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost);
setupTabs();
return mRoot;
}
et R.layout.fragment_tabs:
<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#EFEFEF">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:background="@drawable/tab_background"
android:gravity="center_horizontal"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/tab_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
</RelativeLayout>
Enfin Loung ents d'une activité que je veux charger dans le Fragment (sur appuyant sur le bouton tab1)
public class HomeFragment extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}
}
C'est de vous aider à comprendre l'essentiel des choses, mais le problème se produit ici MainNav.java:
@Override
public void onTabChanged(String tabId) {
Log.d(TAG, "onTabChanged(): tabId=" + tabId);
if (TAB_HOME.equals(tabId)) {
updateTab(tabId, R.id.tab_1);
mCurrentTab = 0;
return;
}
}
lorsqu'un onglet est cliqué, il est enregistré dans l'activité onTabChanged
et la fonction updateTab
est appelée:
private void updateTab(String tabId, int placeholder) {
FragmentManager fm = getFragmentManager();
if (fm.findFragmentByTag(tabId) == null) {
//fm.beginTransaction()
// .replace(placeholder, /*need fragment object here*/ , tabId)
// .commit();
//
}
}
commenté l'replace
méthode est à la recherche d'un (int, fragment, string)
et je suppose que cela devrait alors changer l'espace blanc pour moi.
mais je ne comprends pas d'où provient l'objet fragment! Cet objet fantôme doit contenir en quelque sorte la disposition xml de ma HomeFragment
et me permettre d'interagir avec tout ce que j'ai codé pour l'activité HomeFragment
.
Mon premier sentiment est que mon HomeFragment
activité doit extend FragmentActivity
à la place juste activité. Mais c'est là que je frappe un mur.
Il y a très peu de documentation sur les méthodes de pack de compatibilité, mais la documentation de TabActivity dit de ne plus utiliser TabActivity, donc je suis là. Développement pour Android 2.2+
Insight apprécié.
c'était très utile! Une chose que j'ai est qu'une de mes activités contient une carte google. Il doit donc étendre MapActivity. Si je change cette activité en FragmentActivity alors il plante avec l'erreur évidente "mapview ne peut être appelé qu'à partir de MapActivity", ceci est un problème pour moi et cette structure de fragment à moins que je crée une sorte d'hybride MapFragmentActivity ..... – CQM
cette lib https://github.com/petedoyle/android-support-v4-googlemaps. Je n'ai pas d'expérience avec ça, mais ça pourrait marcher. –
@ ZsomborErdődy-Nagy - vous recommandez la bibliothèque de support, mais aussi que les fragments ne peuvent pas être dans des fragments, ce n'est plus vrai. La bibliothèque de support a eu quelques problèmes avec cela, mais depuis v11, publié autour de votre publication, il y a provisionnement pour les fragments imbriqués avec une logique légèrement spécifique pour le supporter (getChildFragmentManager). Donc, pour toute personne qui trouve ce fil, les activités peuvent ne pas être en fragments, mais les fragments peuvent maintenant être en fragments. – SandWyrm