自定义列表视图的糟糕表现,列表视图项目名称会从数据库转换 [英] Bad performance of custom Listview, Listview Items Name gets converted from Database

查看:152
本文介绍了自定义列表视图的糟糕表现,列表视图项目名称会从数据库转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是,列表视图IST加载缓慢,让自己的阵列适配器laags了一下。我不知道如何改进它,或者它实现一个AsyncTask的。

 公共类RezeptArrayAdapter扩展ArrayAdapter<串GT; {公众最终上下文的背景下;
公众最终的String []值;
公共RezeptArrayAdapter(上下文的背景下,的String []值){
    超(背景下,R.layout.list_rezepte,价值观);
    this.context =背景;
    this.values​​ =值;
    //this.notifyDataSetChanged();}
@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    LayoutInflater吹气=(LayoutInflater)上下文
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);    // DatenBank Abfrage Angepasst奥夫巢穴阵列上下文观
    最后DBHandler_Rezepte db_Rzpt =新DBHandler_Rezepte(背景);    // Einzelabfrage DER Datenbank等级damit SIE weiter unten verarbeitet werdenkönnen
    ConDB_Rezepte数据1 = db_Rzpt.getConDB_Rezepte(1);
    ConDB_Rezepte数据2 = db_Rzpt.getConDB_Rezepte(2);
    ConDB_Rezepte数据3 = db_Rzpt.getConDB_Rezepte(3);
    ConDB_Rezepte DATA4 = db_Rzpt.getConDB_Rezepte(4);
    ConDB_Rezepte DATA5 = db_Rzpt.getConDB_Rezepte(5);
    ConDB_Rezepte DATA6 = db_Rzpt.getConDB_Rezepte(6);
    ConDB_Rezepte DATA7 = db_Rzpt.getConDB_Rezepte(7);
    ConDB_Rezepte DATA8 = db_Rzpt.getConDB_Rezepte(8);
    ConDB_Rezepte DATA9 = db_Rzpt.getConDB_Rezepte(9);
    ConDB_Rezepte DATA10 = db_Rzpt.getConDB_Rezepte(10);
    ConDB_Rezepte DATA11 = db_Rzpt.getConDB_Rezepte(11);
    ConDB_Rezepte DATA12 = db_Rzpt.getConDB_Rezepte(12);
    ConDB_Rezepte Data13 = db_Rzpt.getConDB_Rezepte(13);
    ConDB_Rezepte Data14 = db_Rzpt.getConDB_Rezepte(14);
    ConDB_Rezepte DATA15 = db_Rzpt.getConDB_Rezepte(15);
    ConDB_Rezepte DATA16 = db_Rzpt.getConDB_Rezepte(16);
    ConDB_Rezepte Data17 = db_Rzpt.getConDB_Rezepte(17);
    ConDB_Rezepte Data18 = db_Rzpt.getConDB_Rezepte(18);
    ConDB_Rezepte Data19 = db_Rzpt.getConDB_Rezepte(19);
    ConDB_Rezepte资料20 = db_Rzpt.getConDB_Rezepte(20);
    ConDB_Rezepte Data21 = db_Rzpt.getConDB_Rezepte(21);
    ConDB_Rezepte Data22 = db_Rzpt.getConDB_Rezepte(22);
    ConDB_Rezepte DATA23 = db_Rzpt.getConDB_Rezepte(23);
    ConDB_Rezepte Data24 = db_Rzpt.getConDB_Rezepte(24);
    ConDB_Rezepte Data25 = db_Rzpt.getConDB_Rezepte(25);
    ConDB_Rezepte Data26 = db_Rzpt.getConDB_Rezepte(26);
    ConDB_Rezepte Data27 = db_Rzpt.getConDB_Rezepte(27);
    ConDB_Rezepte Data28 = db_Rzpt.getConDB_Rezepte(28);
    ConDB_Rezepte Data29 = db_Rzpt.getConDB_Rezepte(29);
    ConDB_Rezepte Data30 = db_Rzpt.getConDB_Rezepte(30);    查看rowView = inflater.inflate(R.layout.list_rezepte,父母,假);
    TextView中的TextView =(TextView中)rowView.findViewById(R.id.label);
    ImageView的ImageView的=(ImageView的)rowView.findViewById(R.id.logo);
    的RatingBar ratingbar1 =(的RatingBar)rowView.findViewById(R.id.ratingBar1);    // stellt EIN DAS人死的RatingBar nicht clicken卡恩,SOMIT bleibt死Steuerung erhalten。 Sonst IST死清单当然nicht梅尔clickbar
    ratingbar1.setIsIndicator(真);    textView.setText(值[位置]);
    //字体///////////
    字体TF = Typeface.createFromAsset(context.getAssets(),字体/ OFLGoudyStMTT.ttf);
    textView.setTypeface(TF);    //更改图标基于名称
    POS字符串值= [位置]    INT KuchenIcon = R.drawable.ic_kuchen;
    INT MuffinIcon = R.drawable.ic_muffin;
    INT PlaetzchenIcon = R.drawable.ic_plaetzchen;
    INT ApfelkandiertIcon = R.drawable.ic_apfelkandiert;
    INT OthersIcon = R.drawable.ic_others;    //贝马克等于Vergleich musste ICH Senden的死GetRessource了Methode NACH DEM背景下,大模数组类语境heißt。    //System.out.println(s); // DEBUG Ausgabe
    如果(pos.matches(Data1.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data1.getrating());
        //context.getResources().getString(R.string.Rezept_01))
        //ratingbar1.setRating(Float.parseFloat(Data1.getrating()));    }否则如果(pos.matches(Data2.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data2.getrating());    }否则如果(pos.matches(Data3.getName())){
        imageView.setImageResource(ApfelkandiertIcon);
        ratingbar1.setRating(Data3.getrating());    }否则如果(pos.matches(Data4.getName())){
        imageView.setImageResource(MuffinIcon);
        ratingbar1.setRating(Data4.getrating());    }否则如果(pos.matches(Data5.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data5.getrating());    }否则如果(pos.matches(Data6.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data6.getrating());    }否则如果(pos.matches(Data7.getName())){
        imageView.setImageResource(OthersIcon);
        ratingbar1.setRating(Data7.getrating());    }否则如果(pos.matches(Data8.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data8.getrating());    }否则如果(pos.matches(Data9.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data9.getrating());    }否则如果(pos.matches(Data10.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data10.getrating());    }否则如果(pos.matches(Data11.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data11.getrating());    }否则如果(pos.matches(Data12.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data12.getrating());    }否则如果(pos.matches(Data13.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data13.getrating());    }否则如果(pos.matches(Data14.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data14.getrating());    }否则如果(pos.matches(Data15.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data15.getrating());    }否则如果(pos.matches(Data16.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data16.getrating());    }否则如果(pos.matches(Data17.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data17.getrating());    }否则如果(pos.matches(Data18.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data18.getrating());    }否则如果(pos.matches(Data19.getName())){
        imageView.setImageResource(ApfelkandiertIcon);
        ratingbar1.setRating(Data19.getrating());    }否则如果(pos.matches(Data20.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data20.getrating());    }否则如果(pos.matches(Data21.getName())){
        imageView.setImageResource(MuffinIcon);
        ratingbar1.setRating(Data21.getrating());    }否则如果(pos.matches(Data22.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data22.getrating());    }否则如果(pos.matches(Data23.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data23.getrating());    }否则如果(pos.matches(Data24.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data24.getrating());    }否则如果(pos.matches(Data25.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data25.getrating());    }否则如果(pos.matches(Data26.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data26.getrating());    }否则如果(pos.matches(Data27.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data27.getrating());    }否则如果(pos.matches(Data28.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data28.getrating());    }否则如果(pos.matches(Data29.getName())){
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data29.getrating());    }否则如果(pos.matches(Data30.getName())){
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data30.getrating());
    }
    其他{
        imageView.setImageResource(OthersIcon);
    }    返回rowView;
}
}


解决方案

您是做了很多是没有必要的。我减少了code和增加了一些意见。简而言之:


  1. 使用位置找到哪些数据应该是获取(也有可能是这将减少从数据库中1查询取一个prefetched列表)

  2. 您应该使用ViewHolder模式来回收和再利用的观点 - >颇有些性能改进

  3. 您需要做的 getView()方法外静态的东西,因为像装载字样的东西是相当缓慢。

希望下面的code可以帮助你!

 公共类RezeptArrayAdapter扩展ArrayAdapter<串GT; {    公众最终上下文的背景下;
    公众最终的String []值;
    最后DBHandler_Rezepte db_Rzpt;
    //字体///////////
    字体TF;
    公共RezeptArrayAdapter(上下文的背景下,的String []值){
        超(背景下,R.layout.list_rezepte,价值观);
        this.context =背景;
        this.values​​ =值;        //这里做静态/可重复使用的东东
        // DatenBank Abfrage Angepasst奥夫巢穴阵列上下文观
        db_Rzpt =新DBHandler_Rezepte(背景);
        //字体///////////
        TF = Typeface.createFromAsset(context.getAssets(),字体/ OFLGoudyStMTT.ttf);
    }    //将经常叫!快让它尽可能!
    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        LayoutInflater吹气=(LayoutInflater)上下文
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);        // Einzelabfrage DER Datenbank等级damit SIE weiter unten verarbeitet werdenkönnen
        ConDB_Rezepte数据= db_Rzpt.getConDB_Rezepte(位置);        //不做太多一下子这个技巧供以后:使用ViewHolder模式
        查看rowView = inflater.inflate(R.layout.list_rezepte,父母,假);
        TextView中的TextView =(TextView中)rowView.findViewById(R.id.label);
        ImageView的ImageView的=(ImageView的)rowView.findViewById(R.id.logo);
        的RatingBar ratingbar1 =(的RatingBar)rowView.findViewById(R.id.ratingBar1);        // stellt EIN DAS人死的RatingBar nicht clicken卡恩,SOMIT bleibt死Steuerung erhalten。 Sonst IST死清单当然nicht梅尔clickbar
        ratingbar1.setIsIndicator(真);        textView.setText(值[位置]);        textView.setTypeface(TF);
        //更改图标基于名称
        POS字符串值= [位置]        //数据应该包含应显示该图标的信息!
        // INT KuchenIcon = R.drawable.ic_kuchen;
        // INT MuffinIcon = R.drawable.ic_muffin;
        // INT PlaetzchenIcon = R.drawable.ic_plaetzchen;
        // INT ApfelkandiertIcon = R.drawable.ic_apfelkandiert;
        // INT OthersIcon = R.drawable.ic_others;        //值/数据应用到视图
        imageView.setImageResource(data.getIcon());
        ratingbar1.setRating(da​​ta.getrating());        返回rowView;
    }}

更新:

有关带有图标的问题,解决的办法可能是pretty容易:您可以通过名字来取得的图标。所有你需要做的是在数据库中存储的图标的名称。

当你这样做,你可以用下面的方法来加载图形内容:

 公众诠释getDrawableResource(字符串drawableName){
    返回getResources()则getIdentifier(drawableName,绘制,getActivity()getPackageName()。)。
}

因此​​,所有你需要的是图标名称存储在数据库中,以便data.getIcon()返回用上述方法得到的资源ID。

I got the Problem that the Listview ist loading to slow, so that my array adapter laags a bit. i dont know how to improve it, or implement a AsyncTask in it.

public class RezeptArrayAdapter extends ArrayAdapter<String> {

public final Context context;
public final String[] values;




public RezeptArrayAdapter(Context context, String[] values) {
    super(context, R.layout.list_rezepte, values);
    this.context = context;
    this.values = values;
    //this.notifyDataSetChanged();

}




@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    // DatenBank Abfrage Angepasst auf den Array "context" View
    final DBHandler_Rezepte db_Rzpt = new DBHandler_Rezepte(context);

    //Einzelabfrage der Datenbank Ratings damit Sie weiter unten verarbeitet werden können
    ConDB_Rezepte Data1 = db_Rzpt.getConDB_Rezepte(1);
    ConDB_Rezepte Data2 = db_Rzpt.getConDB_Rezepte(2);
    ConDB_Rezepte Data3 = db_Rzpt.getConDB_Rezepte(3);
    ConDB_Rezepte Data4 = db_Rzpt.getConDB_Rezepte(4);
    ConDB_Rezepte Data5 = db_Rzpt.getConDB_Rezepte(5);
    ConDB_Rezepte Data6 = db_Rzpt.getConDB_Rezepte(6);
    ConDB_Rezepte Data7 = db_Rzpt.getConDB_Rezepte(7);
    ConDB_Rezepte Data8 = db_Rzpt.getConDB_Rezepte(8);
    ConDB_Rezepte Data9 = db_Rzpt.getConDB_Rezepte(9);
    ConDB_Rezepte Data10 = db_Rzpt.getConDB_Rezepte(10);
    ConDB_Rezepte Data11 = db_Rzpt.getConDB_Rezepte(11);
    ConDB_Rezepte Data12 = db_Rzpt.getConDB_Rezepte(12);
    ConDB_Rezepte Data13 = db_Rzpt.getConDB_Rezepte(13);
    ConDB_Rezepte Data14 = db_Rzpt.getConDB_Rezepte(14);
    ConDB_Rezepte Data15 = db_Rzpt.getConDB_Rezepte(15);
    ConDB_Rezepte Data16 = db_Rzpt.getConDB_Rezepte(16);
    ConDB_Rezepte Data17 = db_Rzpt.getConDB_Rezepte(17);
    ConDB_Rezepte Data18 = db_Rzpt.getConDB_Rezepte(18);
    ConDB_Rezepte Data19 = db_Rzpt.getConDB_Rezepte(19);
    ConDB_Rezepte Data20 = db_Rzpt.getConDB_Rezepte(20);
    ConDB_Rezepte Data21 = db_Rzpt.getConDB_Rezepte(21);
    ConDB_Rezepte Data22 = db_Rzpt.getConDB_Rezepte(22);
    ConDB_Rezepte Data23 = db_Rzpt.getConDB_Rezepte(23);
    ConDB_Rezepte Data24 = db_Rzpt.getConDB_Rezepte(24);
    ConDB_Rezepte Data25 = db_Rzpt.getConDB_Rezepte(25);
    ConDB_Rezepte Data26 = db_Rzpt.getConDB_Rezepte(26);
    ConDB_Rezepte Data27 = db_Rzpt.getConDB_Rezepte(27);
    ConDB_Rezepte Data28 = db_Rzpt.getConDB_Rezepte(28);
    ConDB_Rezepte Data29 = db_Rzpt.getConDB_Rezepte(29);
    ConDB_Rezepte Data30 = db_Rzpt.getConDB_Rezepte(30);



    View rowView = inflater.inflate(R.layout.list_rezepte, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
    RatingBar ratingbar1 = (RatingBar) rowView.findViewById(R.id.ratingBar1);

    //stellt ein das man die Ratingbar nicht clicken kann, somit bleibt die Steuerung erhalten. Sonst ist die Liste nicht mehr clickbar
    ratingbar1.setIsIndicator(true);



    textView.setText(values[position]);
    //TYPEFACE///////////
    Typeface tf = Typeface.createFromAsset(context.getAssets(),"fonts/OFLGoudyStMTT.ttf");
    textView.setTypeface(tf);



    // Change icon based on name
    String pos = values[position];

    int KuchenIcon = R.drawable.ic_kuchen;
    int MuffinIcon = R.drawable.ic_muffin;
    int PlaetzchenIcon = R.drawable.ic_plaetzchen;
    int ApfelkandiertIcon = R.drawable.ic_apfelkandiert;
    int OthersIcon = R.drawable.ic_others;



    //bei dem Equals Vergleich musste ich die GetRessource Methode nach dem Context senden, da die Array Class Context heißt.

    //System.out.println(s); //DEBUG Ausgabe


    if (pos.matches(Data1.getName()))  {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data1.getrating());
        //context.getResources().getString(R.string.Rezept_01))
        //ratingbar1.setRating(Float.parseFloat(Data1.getrating()));

    } else if (pos.matches(Data2.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data2.getrating());

    } else if (pos.matches(Data3.getName())) {
        imageView.setImageResource(ApfelkandiertIcon);
        ratingbar1.setRating(Data3.getrating());

    } else if (pos.matches(Data4.getName())) {
        imageView.setImageResource(MuffinIcon);
        ratingbar1.setRating(Data4.getrating());

    } else if (pos.matches(Data5.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data5.getrating());

    } else if (pos.matches(Data6.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data6.getrating());

    } else if (pos.matches(Data7.getName())) {
        imageView.setImageResource(OthersIcon);
        ratingbar1.setRating(Data7.getrating());

    } else if (pos.matches(Data8.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data8.getrating());

    } else if (pos.matches(Data9.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data9.getrating());

    } else if (pos.matches(Data10.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data10.getrating());

    } else if (pos.matches(Data11.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data11.getrating());

    } else if (pos.matches(Data12.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data12.getrating());

    } else if (pos.matches(Data13.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data13.getrating());

    } else if (pos.matches(Data14.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data14.getrating());

    } else if (pos.matches(Data15.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data15.getrating());

    } else if (pos.matches(Data16.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data16.getrating());

    } else if (pos.matches(Data17.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data17.getrating());

    } else if (pos.matches(Data18.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data18.getrating());

    } else if (pos.matches(Data19.getName())) {
        imageView.setImageResource(ApfelkandiertIcon);
        ratingbar1.setRating(Data19.getrating());

    } else if (pos.matches(Data20.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data20.getrating());

    } else if (pos.matches(Data21.getName())) {
        imageView.setImageResource(MuffinIcon);
        ratingbar1.setRating(Data21.getrating());

    } else if (pos.matches(Data22.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data22.getrating());

    } else if (pos.matches(Data23.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data23.getrating());

    } else if (pos.matches(Data24.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data24.getrating());

    } else if (pos.matches(Data25.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data25.getrating());

    } else if (pos.matches(Data26.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data26.getrating());

    } else if (pos.matches(Data27.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data27.getrating());

    } else if (pos.matches(Data28.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data28.getrating());

    } else if (pos.matches(Data29.getName())) {
        imageView.setImageResource(PlaetzchenIcon);
        ratingbar1.setRating(Data29.getrating());

    } else if (pos.matches(Data30.getName())) {
        imageView.setImageResource(KuchenIcon);
        ratingbar1.setRating(Data30.getrating());


    }
    else {
        imageView.setImageResource(OthersIcon);
    }

    return rowView;
}








} 

解决方案

You are doing quite a lot that is not necessary. I reduced the code and added some comments. In short:

  1. Use the position to find which data should be fetched (it could also be a prefetched list which would reduce the fetch from database to 1 query)
  2. You should use the ViewHolder pattern to recycle and reuse views -> quite some performance improvement
  3. You need to do "static" stuff outside the getView() method because stuff like loading a Typeface is quite slow.

Hope the below code helps you!

public class RezeptArrayAdapter extends ArrayAdapter<String> {

    public final Context context;
    public final String[] values;
    final DBHandler_Rezepte db_Rzpt;
    //TYPEFACE///////////
    Typeface tf;


    public RezeptArrayAdapter(Context context, String[] values) {
        super(context, R.layout.list_rezepte, values);
        this.context = context;
        this.values = values;

        // Do "static/reusable" stuff here
        // DatenBank Abfrage Angepasst auf den Array "context" View
        db_Rzpt = new DBHandler_Rezepte(context);
        //TYPEFACE///////////
        tf = Typeface.createFromAsset(context.getAssets(), "fonts/OFLGoudyStMTT.ttf");
    }

    // will be called quite often! Make it fast as possible!
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //Einzelabfrage der Datenbank Ratings damit Sie weiter unten verarbeitet werden können
        ConDB_Rezepte data = db_Rzpt.getConDB_Rezepte(position);

        // To not do too much at once this tip for later: Use the ViewHolder pattern
        View rowView = inflater.inflate(R.layout.list_rezepte, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
        RatingBar ratingbar1 = (RatingBar) rowView.findViewById(R.id.ratingBar1);

        //stellt ein das man die Ratingbar nicht clicken kann, somit bleibt die Steuerung erhalten. Sonst ist die Liste nicht mehr clickbar
        ratingbar1.setIsIndicator(true);

        textView.setText(values[position]);

        textView.setTypeface(tf);


        // Change icon based on name
        String pos = values[position];

        // data should contain the information which icon should be shown!
        //int KuchenIcon = R.drawable.ic_kuchen;
        //int MuffinIcon = R.drawable.ic_muffin;
        //int PlaetzchenIcon = R.drawable.ic_plaetzchen;
        //int ApfelkandiertIcon = R.drawable.ic_apfelkandiert;
        //int OthersIcon = R.drawable.ic_others;

        // apply values/data to the view
        imageView.setImageResource(data.getIcon());
        ratingbar1.setRating(data.getrating());

        return rowView;
    }

}

Update:

For the problem with the icon, the solution might be pretty easy: You can get the icon by name. All you need to do is storing the name of the icon in the database.

When you have done that, you can use the following method to load the drawables:

public int getDrawableResource(String drawableName){
    return getResources().getIdentifier(drawableName, "drawable", getActivity().getPackageName());
}

So all you need is to store the icon name in the database so that data.getIcon() returns the resource id you get by using the above method.

这篇关于自定义列表视图的糟糕表现,列表视图项目名称会从数据库转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆