14

単一のテキスト ファイルを読み取り、TextView.

私が今行っているのは、ファイル全体を文字列に読み込み ( and を使用BufferedReader) 、それをusingStringBuilderに表示することです。700KB のテキスト ファイルは、画面に表示されるまでに約 2 ~ 3 秒かかります。TextViewsetText(string)

しかし、市場に出回っている他の電子ブック リーダーを使用したことがありますが、それらはほぼ瞬時に同じテキストを表示できます。どうすればこれを達成できるか知っている人はいますか?

ありがとうございます。

編集:多くの人がListViewを提案していますが、私の特定のケースではうまくいきません。これは、回答の 1 つに対する私の返信からのものです。 ...[ListView] は、いくつかの理由で機能しません。(1) Listview を TextView のように見せるには、テキストを改行文字で分割する必要があります。大きな段落を 1 つ読み込むと、TextView の読み込みと同じくらい遅くなります。(2) ListView は画面上のアイテムのみを測定するため、テキスト全体の「ページ数」または「高さ」の合計を事前に知ることはできません。

4

5 に答える 5

6

基本的に、重要なのは、必要なときに必要なデータのみをロードすることです。これを行う 1 つの方法は、すべての段落を独自の TextView に配置し、それを ListView に含まれる ListAdapter に配置することです。各段落がデータ ファイル内のどこにあるかを認識できるように、何らかのインデックス セットを配置する必要があります。このインターフェイスを使用すると、必要なときに必要なものだけをロードできます。リスト アダプターは次のようになります (このコードは完全ではありませんが、少なくとも何をすべきかがわかります)。

class ParagraphAdapter extends ListAdapter{
ArrayList<Integer> 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
  String text; // This is the output of the above
  TextView tv=new TextView(context);
  tv.setText(parent.getContext());
}
}

Amazon は、Kindle アプリのページング システムを使用していることに注意してください。アプリをお持ちの場合は、各ページの下部で現在のセクションを確認できます。各「ページ」の長さは、おそらく文に近いでしょう。次に、適切なページを取得するだけの問題であり、これはかなり迅速に行うことができます.

于 2013-01-29T16:44:08.493 に答える
2

@PearsonArtPhotoが言ったことを追加するには -

テキストをページに分割するために、ある種のページングメカニズムを実装することをお勧めします。
あなたがすべきことは、ページあたりの文字数を N + M としましょう。
N = 固定文字数。
M = N から最も近い行末文字までの文字数 (したがって、最後の行が「カット」されていることはわかりません)。
Androidデバイスでこれを「メモリ内」に保持できる場合は、それを行い、ファイルからページを次々にフェッチするのではなく、「メモリ内」構造からフェッチすることをお勧めします
-
これパフォーマンスが向上します。
スクロールして次のページを取得する必要があることに気付いたら、「メモリ内」構造から取得します。

于 2013-01-29T16:47:47.667 に答える
0

適切なコンポーネントを使用しているかどうかを考慮する必要があります。たぶん、行を読んでリストビューに入れる方がはるかに良いでしょう。

試す

List<String> lines; 
listview.adapter(new ArrayAdapter<String>(...,lines));

そして、あなたが見ているもの (ルック アンド フィール) は、あなたが思っているようではないことが何度もありました。

于 2013-01-29T18:01:52.093 に答える