반응형

strings.xml 파일에 문자열 서식을 지정하여 ArrayList에 저장되어 있는 문자열들을  TextView에 출력하는 예제입니다.




앱의 레이아웃은 TextView만 있는 간단한 구조입니다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">

   <TextView
       android:id="@+id/textview_main_list"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:text=""/>

</LinearLayout>





우선 임의로 ArrayList에 다음처럼 데이터를 입력했습니다.


for (int i = 0; i < 20; i++) {

HashMap<String, String> hashMap = new HashMap<>();

hashMap.put(TAG_ID, "id " + i);
hashMap.put(TAG_NAME, "name " + i);
hashMap.put(TAG_ADDRESS, "address " + i);

mArrayList.add(hashMap);
}




strings.xml 파일에서 다음처럼 TextView에 출력할 문자열의 서식을 지정해줍니다.

%d는 자바코드의 String.format 메소드의 인자로 넘겨지는 몇 번째 값을을 가져올지 지정해주는 것입니다.

$s는 문자열을 출력하겠다는 의미이고 $20s의 의미는 문자열 출력시 앞에 공백을 추가해주는 것입니다.


<string name="textview_message" formatted="false">%1$20s %2$20s %3$20s \n</string>




ArrayList에 저장되어 있는 데이터를 가져온 후, String.format 메소드에 첫번째 인자는 서식을 지정한 문자열 리소스, 두번째 이후로는 출력할 데이터를 적어줍니다.


String.format에 의해서 만들어진  문자열 str을 TextView에 넣어줍니다.


for (int i = 0; i < 20; i++) {

HashMap<String, String> outputHashMap = mArrayList.get(i);
String id = outputHashMap.get("id");
String name = outputHashMap.get("name");
String address = outputHashMap.get("address");

String str = String.format(getResources().getString(R.string.textview_message), id, name, address);
mTextView.append(str);
}





실행 결과입니다.

예상한 것처럼  문자열이 정렬이 되지는 않네요..





사용한 전체 코드입니다.


package com.tistory.webnautes.displaystringsofarraylisttotextview;

import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

   private static final String TAG_ID = "id";
   private static final String TAG_NAME = "name";
   private static final String TAG_ADDRESS ="address";


   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);
       TextView mTextView = (TextView) findViewById(R.id.textview_main_list);
       ArrayList<HashMap<String, String>> mArrayList = new ArrayList<>();


       for (int i = 0; i < 20; i++) {

           HashMap<String, String> hashMap = new HashMap<>();

           hashMap.put(TAG_ID, "id " + i);
           hashMap.put(TAG_NAME, "name " + i);
           hashMap.put(TAG_ADDRESS, "address " + i);

           mArrayList.add(hashMap);
       }



       for (int i = 0; i < 20; i++) {

           HashMap<String, String> outputHashMap = mArrayList.get(i);
           String id = outputHashMap.get("id");
           String name = outputHashMap.get("name");
           String address = outputHashMap.get("address");

           
           String str = String.format(getResources()

                   .getString(R.string.textview_message), id, name, address);


           mTextView.append(str);
       }

   }
}



참고


https://developer.android.com/guide/topics/resources/string-resource.html?hl=ko


http://blog.devez.net/100


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts