2017-02-19 9 views
-1

私はリストビューで構成されるアクティビティを作成しています。リストビューの各要素には、1つのイメージと1つのテキストが含まれます。私はわずか10要素だけで、たとえば、アプリケーションを実行しているときにうまく動作します。しかし、私は90要素があるとき、私のアプリは動作を停止します。この問題に対する解決策はありますか?多くの画像を含むリストビューは機能していません

PS。私のアプリはインターネットを使用しません。

私の活動の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は現在プレビュー中のアイテムのみをロードするので、ビューリサイクルを使用する場合と同じです。主な問題はビットマップをメインスレッドにロードすることです。 – Selvin

答えて

0

ViewHolderパターンを使用する必要があります。 これを見てください:Making ListView Scrolling Smooth

+0

問題の内容を説明できますか?私は多くの画像があるとき、なぜ私のアプリがフリーズしているのですか?その理由は何ですか? –

+0

あなたはたくさんのビューを膨らませていて、たくさんのメモリを使用しています。それぞれにイメージがあります。ビューアホルダーを使用すると、ビューの膨張とエキサイティングなビューの再利用を防ぐことができます。 –

関連する問題