2011-08-24 18 views
18

テキストを別々の行に含むファイルがあります。
私は最初に行を表示したいですし、ボタンを押すと、TextViewに2行目が表示され、最初の行が消えます。次に、もう一度押すと3行目が表示されます。ファイルを行単位で取得する方法

TextSwitcherまたは何か他のものを使用する必要がありますか? どうすればいいですか?

答えて

31

あなたは「アンドロイド-資産」としてタグ付けされたので、私はあなたのファイルは、資産フォルダにあると仮定するつもりです。ここに:

InputStream in; 
BufferedReader reader; 
String line; 
TextView text; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    text = (TextView) findViewById(R.id.textView1); 
    in = this.getAssets().open(<your file>); 
    reader = new BufferedReader(new InputStreamReader(in)); 
    line = reader.readLine(); 

    text.setText(line); 
    Button next = (Button) findViewById(R.id.button1); 
    next.setOnClickListener(this); 
} 

public void onClick(View v){ 
    line = reader.readLine(); 
    if (line != null){ 
     text.setText(line); 
    } else { 
     //you may want to close the file now since there's nothing more to be done here. 
    } 
} 

これを試してください。私はそれが完全に動作することを確認することができませんでしたが、これはあなたが従いたい一般的な考えだと思います。もちろん、R.id.textView1/button1をレイアウトファイルで指定した名前に置き換えることもできます。

また、スペースのためにここでエラーチェックがほとんど行われていません。あなたの資産が存在することを確認したいと思うでしょうし、私は読んでファイルを開くときにブロックtry/catchがあるはずです。

編集:大きなエラー、それはR.layoutではないR.id私は問題を解決するために私の答えを編集しました。

+1

回答があれば受け入れて、評判を得ることもできます。 – Otra

15

次のコードは、あなたの必要性

try { 
// open the file for reading 
InputStream instream = new FileInputStream("myfilename.txt"); 

// if file the available for reading 
if (instream != null) { 
    // prepare the file for reading 
    InputStreamReader inputreader = new InputStreamReader(instream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 

    String line; 

    // read every line of the file into the line-variable, on line at the time 
    do { 
    line = buffreader.readLine(); 
    // do something with the line 
    } while (line != null); 

} 
} catch (Exception ex) { 
    // print stack trace. 
} finally { 
// close the file. 
instream.close(); 
} 
+0

あなたは 'openFileInput()'メソッドをどこから入手しますか?また、 "try/finally'ブロックを使用してストリームを閉じてください(例外がスローされたときに閉じられるように)。 –

+1

正しい方法ですが、コンパイルされないCスタイルの条件を使用しています。 null/int/assignment等からbooleanへの自動変換を許可しないので、 'if(instream)'と 'while(line = buffreader.readLine())'を 'if(instream!= null) )とwhile(buffreader.hasNext()) –

+1

BufferedReaderにはhasNext()関数がありません。ヌルであるかどうかを確認してください。 –

0

あなたは単にのTextViewとButtonViewを使用することができます満たす必要があります。 BufferedReaderを使用してファイルを読み込むと、行を1つずつ読み込むための素晴らしいAPIが提供されます。ボタンをクリックするだけで、settextを使ってテキストビューのテキストを変更できます。

また、すべてのファイルの内容を読み込んで文字列のリストに入れることもできます。ファイルが大きすぎない場合は、これをきれいにすることができます。

よろしく、 ステファン

関連する問題