Je suis actuellement en train d'essayer de programmer un Android Launcher
avec Fragments
mais j'ai des problèmes avec le Views
sur le Fragments
. J'ai un Dock-Fragmen
t avec un Dock-Controller
qui permettent à l'utilisateur de changer des fragments, tels que le menu des applications, les fragments de paramètres, etc. Le Dock
est affiché sur le côté de l'affichage, le Fragments
(menu apps, fragment de paramètres) devrait être affiché ci-dessus le Dock
. Le problème est, que le menu des applications n'est pas montré dans son Fragment
associé, mais plutôt dans le Dock Fragment
derrière les icônes de quai, ... Donc je suppose, le fragment de menu app obtient la mauvaise vue dans son onCreateView()
-Method, mais je ne Ne comprends pas pourquoi.Fragment semble gonfler mauvaise vue
Ceci est le code du MainActivity
qui s'étend de FragmentActivity
. J'ajoute les fragments au manager.
private void addDockToManager() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(dbConnection.getLayout(DOCK_TAG), dockController.getFragment(), DOCK_TAG);
ft.commit();
}
private void addPluginsToManager() {
FragmentManager fm = null;
FragmentTransaction ft = null;
for(String key : controllerMap.keySet()) {
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
FrameController controller = null;
if ((controller = controllerMap.get(key)) != null) {
ft.add(dbConnection.getLayout(key), controller.getFragment(), key);
if (key.equals(standardFrame))
ft.addToBackStack(key);
}
ft.commit();
fm.executePendingTransactions();
}
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
for(String key : controllerMap.keySet()) {
if (controllerMap.get(key) != null && !key.equals(standardFrame)) {
ft.hide(fm.findFragmentByTag(key));
}
}
ft.commit();
}
Les mises en page sont codés en dur au moment dbConnection
:
public int getLayout(String name) {
int layout = -1;
switch(name) {
case "app_menu" : layout = R.id.fl_app_menu;
case "settings" : layout = R.id.fl_settings;
case "dock" : layout = R.id.fl_dock;
}
return layout;
}
Le MainActivity's
xml ressemble à ça:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.activity.MainActivity"
tools:ignore="MergeRootFrame" >
<FrameLayout
android:id="@+id/fl_settings"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_above="@+id/fl_dock"
android:background="#00ffffff" >
</FrameLayout>
<FrameLayout
android:id="@+id/fl_app_menu"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_above="@+id/fl_dock"
android:background="#00ffffff" >
</FrameLayout>
<FrameLayout
android:id="@+id/fl_dock"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" >
</FrameLayout>
</RelativeLayout>
Le xml du menu des applications est un gridview
et ressemble que:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gv_apps"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="6"
android:gravity="center"
android:columnWidth="50dp"
android:stretchMode="columnWidth" >
</GridView>
Le App Fragment
ressemble que:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.external_apps, group, false);
layout = (GridView) view.findViewById(R.id.gv_apps);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GridViewAdapter gridViewAdapter = new GridViewAdapter((AppMenuController) myController, apps);
((GridView) layout).setAdapter(gridViewAdapter);
}
Et la getView
Méthode du GridViewAdapter
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(controller.getMainActivity().getApplicationContext());
imageView.setImageDrawable(buttons.get(position).getIcon());
imageView.setLayoutParams(new GridView.LayoutParams(65, 65));
return imageView;
}
J'espère que ce que je l'ai mentionné est assez pour résoudre le problème. Je recherche sur le web pendant des heures mais je n'ai trouvé aucune solution.
Merci! 3 ans d'étude et problèmes de switch-case, ... – user3762869
Haha, pas de problème: P Ça m'arrive aussi, c'est pourquoi j'utilise plutôt les structures if-elseif-else, même si les gens disent que les switchs sont "plus jolis": ré – EpicPandaForce