2017-06-13 13 views
2

ImageViewとTextViewだけのカスタムアダプターがあります。スクロールすると非常に遅くなり、十分な時間をスクロールすると、最終的にアプリケーションが停止します。私はこれにアプローチする方法が効率的ではないと思っていますか?Android Studioのカスタムリストビューがスクロールしてスクロールしてアプリが停止する

public class CustomAdapter extends ArrayAdapter<String> { 

CustomAdapter(Context context, String[] breakfast) { 
    super(context, R.layout.custom_row, breakfast); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row, parent, false); 
    } 
    String breakfastElement = getItem(position); 
    TextView customListTextView = (TextView) convertView.findViewById(R.id.customListTextView); 
    ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView); 

    customListTextView.setText(breakfastElement); 

    switch(breakfastElement) { 
     case "Bacon": 
      imageView.setImageResource(R.drawable.bacon); 
      break; 
     case "Eggs": 
      imageView.setImageResource(R.drawable.eggs); 
      break; 
     case "Toast": 
      imageView.setImageResource(R.drawable.toast); 
      break; 
     case "Ham": 
      imageView.setImageResource(R.drawable.ham); 
      break; 
     case "Hashbrown": 
      imageView.setImageResource(R.drawable.hashbrowns); 
      break; 
     case "Biscuits": 
      imageView.setImageResource(R.drawable.biscuit); 
      break; 
     case "Burrito": 
      imageView.setImageResource(R.drawable.burrito); 
      break; 
     case "Cereal": 
      imageView.setImageResource(R.drawable.cereal); 
      break; 
     case "Oatmeal": 
      imageView.setImageResource(R.drawable.oatmeal); 
      break; 
     case "Sausage": 
      imageView.setImageResource(R.drawable.sausage); 
      break; 
     case "Bagel": 
      imageView.setImageResource(R.drawable.bagel); 
      break; 
     case "Croissant": 
      imageView.setImageResource(R.drawable.croissant); 
      break; 
     case "Orange Juice": 
      imageView.setImageResource(R.drawable.orangejuice); 
      break; 
     case "Milk": 
      imageView.setImageResource(R.drawable.milk); 
      break; 
    } 
    return convertView; 
    } 
} 

リストの各要素に同じイメージしか使用しないと、スクロールが遅くなりません。 すべてのヘルプは高く評価され

編集:

CustomAdapter(Context context, ArrayList<Breakfast> breakfastArrayList) { 
    super(context, R.layout.custom_row, breakfastArrayList); 
    breakfastArray = breakfastArrayList; 
} 

が、それは私が

+0

あなたのクラスの最初の行ではなく、ArrayAdapter

答えて

3

この

public class Breakfast { 

    private String name; 
    private Drawable drawable; 

    public Breakfast(String name, Drawable drawable) { 
    this.name = name; 
    this.drawable = drawable; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public Drawable getDrawable() { 
    return drawable; 
    } 

    public void setDrawable(Drawable drawable) { 
    this.drawable = drawable; 
    } 
} 

のような朝食のデータクラスは、この

ArrayList<Breakfast> breakfastList = new ArrayList<>(); 
breakfastList.add(new Breakfast("Bacon",R.drawable.bacon); 
... 
.. 
. 

パスのような朝食のオブジェクトの配列リストを作成し、このArrayListのを持っているあなたのcustomadapter

public class CustomAdapter extends ArrayAdapter<Breakfast> { 

    public CustomAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public CustomAdapter(Context context, int resource, List<Breakfast> items) { 
     super(context, resource, items); 
    } 
    ... 
    ... 
    ... 


    customListTextView.setText(breakfastList.get(position).getName()); 
imageView.setImageDrawable(breakfastList.get(position).getDrawable()); 

} 

PSへ:与えられたものあなたはAndroidを学び始めています、を調べることをお勧めしますのではなく、リストビュー

+0

あなたを気にしてごめんなさい、CustomAdapterのコンストラクタはどのように見えますか?私はこれを持っています: 私の元の投稿を編集します – ricefieldboy

+0

私はコンストラクタで自分の答えを編集しました。これがうまくいく場合は、この回答を受け入れてください。ありがとう –

+0

とにかく、私はついにそれを働かせました、ありがとう。 ArrayList.addを何度も使用することに問題があり、停止させる原因になります。 – ricefieldboy

2

は、私はあなたのエラーはあなたのコードを見てからではなく、何であるかわからないんだけど、三番目のパラメータとしてbreakfastArrayListを渡すことはできませんあなたなぜ私はあなたがこれのためにArrayAdapterを使用したか分かりません。テキストに基づいて画像を表示したい場合は、朝食用アイテムを含む「BreakfastItem」クラスを作成します。シリアル、ポップなタルト、トースト、イメージを朝食アイテムとペアリングします。これをリストアイテムとして表示することができます。

+0

とArrayAdapter でアダプターを拡張私はアンドロイドDEVを習い始め、アレイアダプタだけであるので、私は、チュートリアルを、以下、それを周りに – ricefieldboy

+1

オーケーをプレイしています各配列リスト項目をどのように表示させるかをリストビューに伝えるために使用されます。異なる朝食の選択肢があるとします。名前とイメージを取り入れたクラスを作成できます。次に、ArrayAdapterクラスで、xmlのウィジェットに対応する両方の項目をスペースに配置するようにアダプタに指示します。あなたはあなたのlist_item xmlに(TextView)を持っていますか?それに朝食アイテムの名前を設定して、ImageView(ImageView)にイメージを設定していますか?しかし、データが表示されている実際のアクティビティでは、あなたのリストにさまざまな種類の朝食を追加しています... – Sav

関連する問題