繁体   English   中英

如何在Android中为带有图像的列表视图设置适配器

[英]How to set Adapter for listview with image in Android

我必须单击一个按钮以显示具有图像的ListView。 不幸的是,当我单击按钮时,应用程序停止了。 我也设置了自定义适配器,但仍然相同。 这是代码:

public class R1 extends Activity {
        String[] signTitle;
        String[] signDescription;
        int images[]={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.     f,R.drawable.g,R.drawable.h};
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.r1);
        Resources res = getResources();
        signTitle = res.getStringArray(R.array.titile);
        signDescription = res.getStringArray(R.array.description);
        ListView lv = (ListView) findViewById(R.id.listView);
        Customlistadapter adapter = new Customlistadapter(this,signTitle,images,signDescription);
        lv.setAdapter(adapter);}

customAdpater.java

public class Customlistadapter extends ArrayAdapter<String> {
    Context context;
    int[] images;
    String[] titleArray;
    String[] descriptionArray;
    public Customlistadapter(Context c, String[] title, int imgs[],String[] desc) {
        super(c, R.layout.activity_show,R.id.textView1,title);
        this.context = c;
        this.images = imgs;
        this.titleArray = title;
        this.descriptionArray = desc;
 }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
         // TODO Auto-generated method stub
         LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         View row = inflater.inflate(R.layout.activity_show, parent,false);
         ImageView myImage = (ImageView) row.findViewById(R.id.image);
         TextView myTitle = (TextView) row.findViewById(R.id.textView1);
         TextView myDescription = (TextView) row.findViewById(R.id.textView2);
         myImage.setImageResource(images[position]);
         myTitle.setText(titleArray[position]);
         myDescription.setText(descriptionArray[position]);
         return row;
    }
}

如果您可以发布LogCat或至少指出产生错误的行,我们可以为您提供更好的帮助。 同样,初始化这样的ListView效率很低。

实施“查看器模式”会有所帮助。

优化的CustomListAdapter

public class CustomListAdapter extends ArrayAdapter<String>
 {
    Context context;
    int[] images;
    String[] titleArray;
    String[] descriptionArray;
    public CustomListAdapter(Context c, String[] title, int imgs[],String[] desc) {
        super(c, R.layout.activity_show,R.id.textView1,title);
        this.context = c;
        this.images = imgs;
        this.titleArray = title;
        this.descriptionArray = desc;
        // TODO Auto-generated constructor stub
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder viewHolder;

        if(convertView == null)
        {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.activity_show, parent,false);

            viewHolder.title = (TextView)convertView.findViewById(R.id.textView1);
            viewHolder.description = (TextView)convertView.findViewById(R.id.textView2);
            viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();

            if(titleArray[position] != null)
            {
                viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
                viewHolder.title= (TextView) convertView.findViewById(R.id.textView1);
                viewHolder.description = (TextView) convertView.findViewById(R.id.textView2);
                viewHolder.image.setImageResource(images[position]);
                viewHolder.title.setText(titleArray[position]);
                viewHolder.description.setText(descriptionArray[position]);
            }
        }
        return convertView;
    }

    private class ViewHolder
    {
        TextView title,description;
        ImageView image;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM