2017-02-19 4 views
-1

나는 목록보기로 구성된 활동을 만들고 있습니다. listview의 각 요소는 하나의 이미지와 하나의 텍스트를 포함합니다. 예를 들어 10 개의 요소만으로 앱을 실행하면 잘 작동합니다. 하지만 90 요소가있을 때, 내 애플 리케이션 작동을 멈 춥니 다. 이 문제에 대한 해결책이 있습니까?많은 이미지가있는 목록보기가 작동하지 않습니다.

추신. 내 앱은 인터넷을 사용하지 않습니다.

내 활동 XML :

<RelativeLayout 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" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".Testlistview" > 

    <ListView 
     android:id="@+id/list66" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:cacheColorHint="@android:color/transparent" 
     android:fastScrollEnabled="true" 
     android:persistentDrawingCache="scrolling" 
     android:scrollingCache="false"> 

    </ListView> 

</RelativeLayout> 

내 어댑터 :

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class customadaptertest extends ArrayAdapter<String> { 

private final Activity context; 
private final String[] web; 
private final Integer[] imageId; 
public customadaptertest(Activity context, 
        String[] web, Integer[] imageId) { 
    super(context, R.layout.listtestitem, web); 
    this.context = context; 
    this.web = web; 
    this.imageId = imageId; 
} 
@Override 
public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.listtestitem, null, true); 
    TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 

    ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 
    txtTitle.setText(web[position]); 

    imageView.setImageResource(imageId[position]); 
    return rowView; 
} 
} 

내 활동

import android.content.res.TypedArray; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 

public class Testlistview extends AppCompatActivity { 


ListView list66; 
String[] web = { 
     "some text" 
} ; 
Integer[] imageId = { 
     R.drawable.some_item_image 
}; 

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


    customadaptertest adapter = new 
      customadaptertest(Testlistview.this, web, imageId); 
    list66=(ListView)findViewById(R.id.list66); 
    list66.setAdapter(adapter); 

} 
} 

내 항목 :

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 
<TableRow> 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="50dp" 
     android:layout_height="50dp"/> 

    <TextView 
     android:id="@+id/txt" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" /> 

</TableRow> 
</TableLayout> 
+0

목록보기 대신 recyclerview를 사용하는 것이 좋습니다. recyclerview는 현재 미리보고있는 필수 항목 만로드하기 때문에. –

+0

* recyclerview는 현재 미리보기가 필요한 항목 만로드하므로 * 리사이클링을 사용하는 것처럼 ListView와 같습니다 ... 주 스레드에서 비트 맵을로드하는 중입니다. – Selvin

답변

0

ViewHolder 패턴을 사용해야합니다. 보십시오 : Making ListView Scrolling Smooth.

+0

문제의 원인을 설명해 주시겠습니까? 내 이미지가 많을 때 왜 내 앱이 멈추는거야? 그게 뭐야? –

+0

많은 뷰를 부풀리고 많은 메모리를 사용하고 있으며 각각 이미지가 있습니다. 뷰어 홀더를 사용하면 뷰를 팽창시키고 흥미로운 뷰를 재사용하지 않아도됩니다. –