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

ListView의 스크롤링 속도 때문에 질문이 있습니다..

0 추천
@Override
 public View getView(final int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub

  View view = convertView;

  Object Holder = getHolder(DetailLayoutID);

  if (view == null) {
   final LayoutInflater vi = (LayoutInflater) mContext
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   view = vi.inflate(DetailLayoutID, null);

   InitHolder(DetailLayoutID, view, Holder, position);

   view.setTag(Holder);
  } else {
   Holder = view.getTag();
  }

  SetHolder(DetailLayoutID, Holder, position);
  return view;
 }

리스트뷰를 커스터마이징 하여  사용하려 위와 같이 각종 TextView나 LinearLayout, CheckBox 등등을 넣어놨구요.(CheckBox는 때에따라 visible 되기도, gone 되기도 합니다. 각 컨트롤별 ID는 일단 삭제 해봤어요..ㅠ)

 

getView 함수의 InitHolder 함수는 해당 홀더를 초기화 해주는 함수구요(findviewbyid)

SetHolder는 Item을 직접 넣어주는 역할을 합니다.

 

문제는 리스트뷰의 스크롤이 움직이는 속도가 완전 버벅거린다는 점입니다.

이를 해결 하기 위해 구글에 찾아보니 주로 AsyncTask를 이용하여 해결 하라고 해서 SetHolder를 AsynTask를 사용하여 해봤는데 여전히 느린것 같습니다.

 

그래서 드는 생각이 혹시 레이아웃에 문제가 있는 것이 아닐까 생각이 됩니다.. 좀 스무쓰 하게 움직이게 할 수 있는 방법이 없을까요????

 

으리으리 (300 포인트) 님이 2014년 7월 7일 질문
앗 레이아웃이 안올라 갔네요. 레이아웃은
<?xml version="1.0" encoding="utf-8"?>
<!-- 전체 레이아웃 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- <scrollview -->
    <!-- android:fillViewport="true" > -->

    <LinearLayout
        android:id="@+id/ll_stakeout_list"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="horizontal"
            android:visibility="gone" >

            <TextView
                android:layout_width="1dip"
                android:layout_height="fill_parent"
                android:background="@color/black" />

            <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_weight="1"
                android:gravity="center" />
        </LinearLayout>
        
        <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:focusable="false"
                android:visibility="gone"/>
        
        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:layout_width="1dip"
            android:layout_height="fill_parent"
            android:background="@color/black" />
    </LinearLayout>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="1dip"
        android:background="@color/black" />

    <!-- </scrollview> -->

</LinearLayout>


요런 형태 입니당

1개의 답변

0 추천
홀더 패턴 자체에는 문제가없습니다

이미지로딩하는쪽이나 무언가가 UI스레드를 건드는부분이있어서 그런거같은데..

Adapter 전체코드랑 리스트의구조까지 스샷으로 찍어서 보여줘보시겠어요?
whdrb19 (23,520 포인트) 님이 2014년 7월 7일 답변
...