Android – Comment charger efficacement une grande quantité de texte dans un TextView?

TextView une application Android qui lit un seul fichier texte et l’affiche sur un TextView .

Ce que je fais en ce moment, c’est lire le fichier entier dans une chaîne (à l’aide de BufferedReader et SsortingngBuilder ) et l’afficher sur un TextView aide de setText(ssortingng) . Un fichier texte de 700 Ko peut prendre environ 2 à 3 secondes avant de s’afficher à l’écran.

Mais j’ai utilisé d’autres lecteurs d’ebook sur le marché et ils peuvent afficher le même texte presque instantanément. Quelqu’un sait comment je peux y arriver?

Merci.

Edit : Beaucoup suggèrent ListView, mais cela ne fonctionne pas pour mon cas particulier. Cela provient de ma réponse à l’une des réponses: … [ListView] ne fonctionne pas pour moi pour plusieurs raisons. (1) Pour que Listview ressemble à un TextView, nous devons séparer le texte en caractères de nouvelle ligne. Si je charge un seul grand paragraphe, c’est tout aussi lent que de charger un TextView. (2) Puisqu’une liste ne mesure que l’élément à l’écran, je ne peux pas connaître à l’avance le nombre total de pages ou la hauteur du texte entier.

La clé consiste essentiellement à charger les données dont vous avez besoin, quand vous en avez besoin. Une façon de procéder consiste à placer chaque paragraphe dans son propre TextView, qui est placé dans un ListAdapter, qui est inclus dans un ListView. Il doit y avoir une sorte d’index mis en place, de sorte que chaque paragraphe sache où trouver le fichier de données. Cette interface vous permettra de ne charger que ce dont vous avez besoin, quand vous en avez besoin. Votre adaptateur de liste ressemble à ceci (Ce code n’est pas complet, mais il devrait vous donner au moins une idée de ce que vous devriez faire):

 class ParagraphAdapter extends ListAdapter{ ArrayList mLocations; // Somewhere define this to your locations, I'll leave that for you to figure out protected View getView(int position,View convertView, ViewGroup parent) { mLocations.get(position); // Read the file starting at this position, until the next value Ssortingng text; // This is the output of the above TextView tv=new TextView(context); tv.setText(parent.getContext()); } } 

On peut noter qu’Amazon utilise un système de pagination pour l’appli Kindle. Si vous avez l’application, vous pouvez voir au bas de chaque page sur quelle section vous vous trouvez. Chaque “page” est probablement plus proche d’une phrase ou plus de longueur. Ensuite, il s’agit simplement d’obtenir la bonne page, ce qui peut être fait assez rapidement.

Pour append ce que @PearsonArtPhoto a dit –

Je vous suggère de mettre en place une sorte de mécanisme de pagination pour diviser votre texte en pages.
Ce que vous devez faire est de scinder votre texte en fonction de N + M nombre de caractères par page.
N = nombre fixe de caractères.
M = nombre de caractères compris entre N et le dernier caractère de fin de ligne (vous ne verrez donc pas la dernière ligne “coupée”).
Je suggérerais que si votre appareil Android vous permet de garder cela “en mémoire” –
faire ça,
et n’essayez pas d’extraire ceci du fichier page par page, mais plutôt de chercher à partir de la structure “en mémoire” – cela améliorera les performances.
Une fois que vous avez fait défiler et réalisé que vous devez récupérer la page suivante, récupérez-la à partir de la structure “en mémoire”.

Lucas Rocha a construit une jolie bibliothèque appelée Smoothie à cet effet.

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

À la fin de ces conseils en matière de performances pour listview Android, vous trouverez un lien vers une explication sur Smoothie. Enfin, vous trouverez la bibliothèque disponible sur github.

Initialement décrite pour le chargement d’images, l’approche s’applique également au chargement de texte.

Vous devez considérer si vous utilisez les bons composants. Peut-être est-il préférable de lire les lignes et de les mettre en liste.

essayer

 List lines; listview.adapter(new ArrayAdapter(...,lines)); 

Et plusieurs fois, ce que vous voyez (Look and Feel) n’est pas comme vous le pensez.