ListFragment n'accepte pas ma mise en page
Selon ce lien: ListFragment développeurs android
Je veux mettre ma mise en page personnalisée pour la liste, mais il fait exception.
Voici le code:
public class ListFragmentActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
if(fm.findFragmentById(android.R.id.content) == null)
{
myListFragments list = new myListFragments();
fm.beginTransaction().add(android.R.id.content, list).commit();
}
}
public static class myListFragments extends ListFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.topoffers, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
List<OfferModel> offers = Global.getInstance().getOffers();
List<OfferModel> topOffers = new ArrayList<OfferModel>(4);
for (int i = 0; i < 4; i++) {
if (offers.get(i).getOfferImage() == null)
offers.get(i).setOfferImage(
downloadFile(offers.get(i).getOfferImageUrl()));
topOffers.add(offers.get(i));
}
LazyAdapter adapter = new LazyAdapter(getActivity());
adapter.setData(topOffers);
setListAdapter(adapter);
setListShown(true);
}
public Bitmap downloadFile(String fileUrl) {
URL myFileUrl = null;
try {
myFileUrl = new URL(fileUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
return BitmapFactory.decodeStream(is);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}}
et ma mise en page personnalisée est R.layout.topoffers
Logcat:
05-15 21:43:56.975: W/dalvikvm(218): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
05-15 21:43:56.975: E/AndroidRuntime(218): Uncaught handler: thread main exiting due to uncaught exception
05-15 21:43:56.995: E/AndroidRuntime(218): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.anddev.android.ikiwi/org.anddev.android.ikiwi.ListFragmentActivity}:
java.lang.IllegalStateException: Can't be used with a custom content view
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.os.Handler.dispatchMessage(Handler.java:99)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.os.Looper.loop(Looper.java:123)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread.main(ActivityThread.java:4363)
05-15 21:43:56.995: E/AndroidRuntime(218): at java.lang.reflect.Method.invokeNative(Native Method)
05-15 21:43:56.995: E/AndroidRuntime(218): at java.lang.reflect.Method.invoke(Method.java:521)
05-15 21:43:56.995: E/AndroidRuntime(218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-15 21:43:56.995: E/AndroidRuntime(218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-15 21:43:56.995: E/AndroidRuntime(218): at dalvik.system.NativeStart.main(Native Method)
05-15 21:43:56.995: E/AndroidRuntime(218): Caused by: java.lang.IllegalStateException:
Can't be used with a custom content view
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.ListFragment.setListShown(ListFragment.java:282)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.ListFragment.setListShown(ListFragment.java:258)
05-15 21:43:56.995: E/AndroidRuntime(218): at org.anddev.android.ikiwi.ListFragmentActivity$myListFragments.onActivityCreated(ListFragmentActivity.java:57)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.Activity.performStart(Activity.java:3723)
05-15 21:43:56.995: E/AndroidRuntime(218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
05-15 21:43:56.995: E/AndroidRuntime(218): ... 11 more
05-15 21:43:57.025: I/dalvikvm(218): threadid=7: reacting to signal 3
05-15 21:43:57.025: E/dalvikvm(218): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
Ce doit être plus précis que "il fait des exceptions"
droit, mais je ne peux pas déterminer ce qui est fait exception
Publier vos logcat montrant les erreurs
Qui est en ligne 57 dans ListFragmentActivity?
droit, mais je ne peux pas déterminer ce qui est fait exception
Publier vos logcat montrant les erreurs
Qui est en ligne 57 dans ListFragmentActivity?
OriginalL'auteur mohamed zakria | 2012-05-15
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à un problème qui a été signalé à Google déjà.
Google Question
Si c'est bien votre problème, il ya un couple de suggestions en bas de la page pour le fixer (enfin, plus pour le faire fonctionner de fixation).
Je crois que vous venez de supprimer le textview à partir de votre mise en page et dans votre onActivityCreated mettre
setEmptyText("Your emptyText message")
. Tous les exemples que j'ai trouvés montrent que le fait d'être utilisé avant de créer/configurer l'adaptateur.j'ai fait ce que vous m'avez dit mais malheureusement cela ne fonctionne pas, il provoque toujours une exception.
il fonctionne correctement avec sa configuration par défaut, mais je ne peut toujours pas s'appliquer ma mise en page forlist
Je suis à court d'idées.
OriginalL'auteur Barak
Créer le fichier de mise en page list_content.xml
Mettre cela à l'intérieur de votre ListFragment classe:
Maintenant, vous pouvez utiliser normalement:
Source:
OriginalL'auteur Noel
Cela pourrait être plus facile:
Créer votre mise en page comme vous le feriez normalement, mais ne pas ajouter à la liste/vide/chargement des trucs. Puis dans votre listfragment de onCreateView:
Maintenant, vous pouvez utiliser setListShown...
Non seulement vous pouvez utiliser setListShow(), mais vous obtenez toutes les actions de comportement et de regarder à l'intérieur des limites de votre propre grand modèle. Vous voulez peut-être placer un conteneur au sein de la société mère et ajouter la super vue de la place de la mère elle-même.
Cela fonctionne, mais comme vous pouvez le voir ici, il provoque votre hiérarchie pour avoir deux android:id/liste.
+1 milliard de dollars. J'avais besoin de cette solution pour un problème différent. J'avais besoin de mes propres Vues supplémentaires au-dessus et au-dessous de la
ListView
utilisé dansListFragment
. Je voulais garder leurListView
parce que je voulais garder la barre de progression/vide TextView fonctionnalité, mais j'ai besoin de quelques autres points de Vue dans le fragment ainsi, non seulement une ListView. Cette méthode m'a permis de déposer l'ensemble de leur mise en page sur mon propre. A pris certains de jouer, mais j'ai été capable de la faire tomber dans un vide FrameLayout au milieu de mon LinearLayout. Pour quelque raison que ce soit, je ne pouvais pas ajouter directement l'affichage comme vous l'avez fait sans ma mise en page à la recherche de mal.Aussi le Android doc (faites défiler jusqu'à onCreateView()) de proposer quelque chose de similaire, où vous
<include>
lalist_content
mise en page (l'ID de ressource pour leur mise en page par défaut -peut être trouvé dans le kit de développement Android /dossier res) dans votre XML. Mais qui ne fonctionnerait qu'avec API 11+ bien que cette approche devrait être compatible avec le Soutien-V4 bibliothèqueListFragment
retour à l'API 4. Bravo l'homme, je n'aurais pas pensé à faire cela.OriginalL'auteur Pepijn
Il suffit de remplacer l'original ListView avec votre CustomListView Disposition au sein de la onCreateView méthode. A travaillé pour moi.
OriginalL'auteur tiran
Aujourd'hui, j'ai eu le même problème. À la recherche de la solution dans Google, j'ai trouvé un post dans un blog japonais. (http://blog.nkzn.net/entry/2012/06/14/160706).
Pour une utilisation
setListShown(boolean)
vous devez faire en premier dans votre mise en page:Maintenant dans votre ListFragment:
avec ce 2 id numéros de seted de ses parents setListShown(boolean) fonctionnera sans problèmes.
OriginalL'auteur ClarkXP
Une autre solution qui a fonctionné pour moi aussi, c'est juste pour mettre cette ligne
au lieu de votre liste.
Vous êtes en mesure de construire votre propre contenu ou de l'entourer de quelques autres points de vue. Par exemple, voici comment ma mise en page ressemble à ceci:
OriginalL'auteur Yuriy Yunikov
J'ai juste besoin de changer mon texte vide
TextView
propriétés et cela a faitN'oubliez pas que si vous essayez de l'initialisation
tvEmpty
avant d'appelersetEmptyText("Empty")
, vous allez lancer dans unNullPointerException
OriginalL'auteur Maksim Dmitriev
Ce code a fonctionné pour moi:
OriginalL'auteur William Seemann
Un peu de retard, mais n'a pas vu cette réponse.
À l'intérieur de
Fragment
:mais garder à l'esprit que dans
fragment_list_activity.xml
vous devez définir l'Id deandroid:id="@id/loading"
,android:id="@id/content"
etandroid:id="@id/empty"
pour votre point de vue!OriginalL'auteur Matej Špilár
Essayez de supprimer
setListShown(true);
?J'ai eu le même problème, il y a quelques temps.
Il semble que vous ne pouvez pas l'utiliser si vous avez une mise en page personnalisée dans
ListFragment
.OriginalL'auteur Tuna