0

TextView を文字列に変換すると同時に、文字列に新しい行 ("\n") を追加しようとしています。ユーザーが [名前を保存] ボタンをクリックすると、生成されて TextView に表示される名前が追加されます。次に、別の名前を生成することを選択し、もう一度 [保存] をクリックします。保存した名前を後で表示するときは、名前を別々の行に並べて表示する必要があります。これは私のコードです:

/** Called when the user clicks the Save Name button */
public void save_name(View view) {

    String filename = "saved_names.txt";
    TextView inputName = (TextView) findViewById(R.id.tViewName);
    String name = inputName.getText().toString().concat("\n");
    FileOutputStream outputStream;

    try {
      outputStream = openFileOutput(filename, Context.MODE_APPEND);
      outputStream.write(name.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
}

これは機能しません。まだ同じ行にあります。何をすべきか?

4

3 に答える 3

0

私は自分で答えを見つけました。上記のコードは正しいです:

/** Called when the user clicks the Save Name button */
public void save_name(View view) {

    String filename = "saved_names.txt";
    TextView inputName = (TextView) findViewById(R.id.tViewName);
    String name = inputName.getText().toString().concat("\n");
    FileOutputStream outputStream;

    try {
      outputStream = openFileOutput(filename, Context.MODE_APPEND);
      outputStream.write(name.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
}

しかし、名前を表示するために、ファイルから読み取ったコードに「\n」を追加する必要もありました。

private String readFromFile() {
    String ret = "";
    try {
        InputStream inputStream = openFileInput("saved_names.txt");

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append(receiveString + "\n");
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e(TAG, "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}

この行で:stringBuilder.append(receiveString + "\n");

とにかく助けてくれてありがとう!

于 2013-09-07T14:46:51.047 に答える
0

まず、TextView を設定してsingleLineモードを無効にします。デフォルトでは、TextView の singleLine は true に設定されています。

<TextView
    android:id="@+id/myTextView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:singleLine="false" />

次に、実際には TextView のコンテンツを設定していません。現在のコンテンツを取得し、その String オブジェクト (TextView ではない) に改行を追加するだけです。

あなたが望むものは:

TextView inputName = (TextView) findViewById(R.id.tViewName);
String name = inputName.getText().toString().concat("\n");
inputName.setText(name);

名前のリストにListViewを使用することを検討することもできます。これは、アイテムの追加、削除、およびスタイリングのサポートがはるかに優れているためです。

于 2013-09-06T18:12:11.207 に答える