2016-10-19 3 views
0

정말 도움이 필요합니다. 응용 프로그램에서 사용한 Listview는 스크롤하는 동안 매우 느립니다. 어떻게 고칠 수 있습니까? 나는스크롤 할 때 ListView가 매우 느립니다.

내가 초보자가 안드로이드에서 오전 .. 이미지를 사용 viewholder 아무것도하지만, 변화를 줄일 :)

또한이 메시지가 : 나는/안무 : 건너 뛴 32 프레임! 응용 프로그램이 주 스레드에서 너무 많은 작업을하고있을 수 있습니다. 여기

내 코드

public class asker extends Activity { 
    ListView list; 
    String[] askerbaslik; 
    int[] images = 

      {R.drawable.barbar_icon, R.drawable.okcu_icon, 
        R.drawable.dev_icon, 
        R.drawable.goblin_icon, 
        R.drawable.duvar_kirici_icon, R.drawable.balon_icon, 
        R.drawable.buyucu_icon, R.drawable.sifaci_icon, 
        R.drawable.ejderha_icon, 
        R.drawable.pekka_icon, R.drawable.yavruejder_icon, R.drawable.madenci_icon}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview); 

     Resources res = getResources(); 
     askerbaslik = res.getStringArray(R.array.asker_adlari); 

     list = (ListView) findViewById(R.id.listview); 

     ilyasadapter adapter = new ilyasadapter(this, askerbaslik, images); 

     list.setAdapter(adapter); 
    } 

    class ilyasadapter extends ArrayAdapter<String> { 
     Context context; 
     int[] images; 
     String[] titlearray; 

     ilyasadapter(Context c, String[] titles, int imgs[]) { 
      super(c, R.layout.liste_tasarim, R.id.asker_baslik, titles); 
      this.context = c; 
      this.images = imgs; 
      this.titlearray = titles; 
     } 

     class MyViewHolder { 
      TextView mytitle; 
      ImageView myimage; 

      MyViewHolder(View v) { 

       mytitle = (TextView) v.findViewById(R.id.asker_baslik); 
       myimage = (ImageView) v.findViewById(R.id.asker_icon); 
      } 
     } 


     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      MyViewHolder holder = null; 

      if (row == null) { 

       LayoutInflater inflater = (LayoutInflater) 
         context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
       row = inflater.inflate(R.layout.liste_tasarim, parent, false); 
       holder = new MyViewHolder(row); 

       row.setTag(holder); 

       Log.d("test", "creating a new row"); 
      } else { 

       holder = (MyViewHolder) row.getTag(); 

       Log.d("test", "Recycling stuff"); 
      } 

      holder.myimage.setImageResource(images[position]); 
      holder.mytitle.setText(titlearray[position]); 

      return row; 
     } 
    } 
} 

단일 row.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<ImageView 
    android:layout_marginTop="5dp" 
    android:id="@+id/asker_icon" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:src="@drawable/barbar_icon" 
    android:background="@drawable/rounded_corner" 

    ></ImageView> 

<TextView 
    android:id="@+id/asker_baslik" 
    android:layout_marginTop="40dp" 
    android:layout_marginLeft="30dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Asker ismi" 
    android:textColor="#ffffff" 
    android:textSize="15dp" 
    android:fontFamily="sans-serif" 
    /> 

    </LinearLayout> 

내 목록보기입니다

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#455A64" > 
<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="#263238" 
    android:dividerHeight="2px" 
    /> 
</RelativeLayout> 
+0

로드가 목록 뷰 성능을 저하시키기에 충분히 무거워지는 위치를 결정하기 위해 프로파일 링을 수행 했습니까? – fakataha

+2

그냥 생각했지만 병목 현상이 어디에 있는지 보려면 목록보기 항목에서 이미지를 제거하십시오. 이미지가 정말 큰 입술인가요? – fakataha

+0

난 왜 당신이 하나의 행에 layout_height = "match_parent"를 가지고 있지 않아야하는지 궁금합니다. wrap_content이되어서는 안됩니다. – zombie

답변

0

그 향상 경우 목록보기에서 아이콘을 제거하고 참조 해보세요 공연. 너무 높은 해상도의 이미지를 사용 중일 수 있습니다. 나도 고해상도 이미지를 사용할 때 performance anomalies을 발견했습니다.

도움이되는지 알려주세요. 그렇지 않다면 우리가 시도 할 수있는 몇 가지 다른 것들이 있습니다.

+0

감사합니다. 이미지 크기를 바꾼 다음 지금은 완벽하게 작동합니다! – Boyka

+0

@Boyka 듣기 좋네! 제 대답을 "받아 들여"사람들은 당신이 문제를 해결했음을 알게 될 것입니다. –

관련 문제