마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

3500개 addview 하기,,테이블 레이아웃은 정말 아닌것인가요..

0 추천

안녕하세요.

우선 만들려는 모양새는..50 x 70 정도의 표를 만들건데.

XML은 아래와 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:background="#FFFFFF">

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF">

        <TableLayout
            android:id="@+id/table"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#FFFFFF">


        </TableLayout>

    </ScrollView>

</LinearLayout>


그리고 커스텀 뷰(행,열, 그룹코드, TextView를 멤버변수로..)를 만들어서

그룹별로 배경색을 다르게 설정하고 ArrayList를 생성하여 add합니다.


즉. 각각 셀에 넣을 커스텀뷰를 생성해서 ArrayList에 넣는 겁니다..
그러면 3500개의 객체가 생성되는..;;


암튼 액티비티에서 TableLayout을 findViewById로 받아서

for문을 2번 돌면서 행,열에 맞는 커스텀뷰를 ArrayList에서 끄집어 냅니다.

그리고 1행마다 TableRow를 생성하고 해당 커스텀뷰를 TableRow에 Add 시키고

전체..70행을 다 돌면 TableRow를 TableLayout에 Add합니다.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        TableLayout tableLayout = (TableLayout) findViewById(R.id.table);   // 테이블 id 명

        //초기화
        initializeMap(tableLayout, TripColorApp.ROW_CNT, TripColorApp.COL_CNT);

public void initializeMap(TableLayout tableLayout, int rowCnt, int colCnt){
//파라미터로 전달받은 행의 개수
        for (int i = 1 ; i <= rowCnt ; i++) {
            // Creation Table Row
            TableRow tableRow = new TableRow(this);
            tableRow.setLayoutParams(tableRowParams);

            //파라미터로 전달받은 열의 개수
            for (int j = 1; j <= colCnt; j++) {

                // 위치 = (row - 1) x 49 + col
                int position = (i - 1)*colCnt + j;

                RectView rectView = mapArrayList.get(position - 1);

                if(rectView == null) {

                    rectView = new RectView(this);
                }

                rectView.setLayoutParams(cellParams);
                tableRow.addView(rectView);
            }

            tableLayout.addView(tableRow);
        }


결과적으로는 잘 됩니다..근데 한..3초~5초 정도 걸리는것 같아요


제가 만들고 있지만 저라면 이어플 느려서 안쓸것 같아요..ㅠㅠ

그래서 질문은..


1. 50 x 70 표를 작성하고 특정 셀들끼리 그룹을 지어서 배경색을 다르게 해야하고,,3500개 셀중 하나를 클릭하면 해당 커스텀뷰의 그룹코드에 해당하는 모든 셀들이  함께 눌리듯한 이펙트를 주고 싶습니다. 어떤 식으로 구현해야 속도도 빠르고 잘 될까요?ㅠ.ㅠ

2. 뒤로가기 버튼을 누른다음 다시 표를 불러올때, 이미 addview를 했기 때문에 removeView를 하라고 오류가 뜹니다.
removeView를 하게되면 결국 3500개를 다시 불러와야한다는건데..어떻게 처리해야할까요..

 

 

치솟음 (3,710 포인트) 님이 2015년 4월 14일 질문

3개의 답변

+1 추천
웹쪽 잘하시면 동적으로 HTML 코드 만들어서 웹뷰로 띄우는 것도 괜찮습니다.
바램 (19,650 포인트) 님이 2015년 4월 14일 답변
0 추천
의도가 궁금해서 그런데 뭐하려고 하시는건가요?

그렇게 많은 리소스가 필요하다면 surfaceview 위에서 작업하시거나 game engine 쓰시는걸 권유합니다.

개발자 당사자가 나 같아도 안쓰겠다는 생각이 들면 말 다한거죠..
Gradler (109,780 포인트) 님이 2015년 4월 14일 답변
Gradler님이 2015년 4월 14일 수정
surfaceview 강추함돠
0 추천
gridview나 recyclerview를 쓰세요.
익명사용자 님이 2015년 4월 14일 답변
...