Android ListView的自定义适配器

Android ListView的自定义适配器,android,listview,android-arrayadapter,custom-adapter,Android,Listview,Android Arrayadapter,Custom Adapter,我正在尝试制作一个定制的ListView,它应该显示一个注释标题以及创建注释的时间和日期,每个都在单独的TextView中,而每个注释标题也由存储在DB中的颜色值着色。因此,我为它创建了一个自定义适配器: public class NoteAdapter extends ArrayAdapter<Note> { public NoteAdapter(Context context, int resource, int textViewResourceId, List<Note

我正在尝试制作一个定制的ListView,它应该显示一个注释标题以及创建注释的时间和日期,每个都在单独的TextView中,而每个注释标题也由存储在DB中的颜色值着色。因此,我为它创建了一个自定义适配器:

public class NoteAdapter extends ArrayAdapter<Note> {

public NoteAdapter(Context context, int resource, int textViewResourceId, List<Note> objects) {
    super(context, resource, textViewResourceId, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Creating the row
    View row = super.getView(position, convertView, parent);

    // Changing the text of time and date
    ((TextView)row.findViewById(R.id.noteTitle)).setText(getItem(position).getTitle());
    ((TextView)row.findViewById(R.id.noteTime)).setText(getItem(position).getTime());
    ((TextView)row.findViewById(R.id.noteDate)).setText(getItem(position).getDate());

    ((TextView)row.findViewById(R.id.noteTitle)).setTextColor(Color.parseColor(getItem(position).getColor()));

    // Returning the row
    return row;
    }
}

我错过了什么?为什么它一直崩溃?我如何修复它?

您没有在自定义适配器的
getView()
中扩展视图

你做的事情不对

// Creating the row
View row = super.getView(position, convertView, parent);
尝试这样做,其中row.xml将是布局文件夹中的布局文件

LayoutInflater inflater=LayoutInflater.from(context);
View row=inflater.inflate(R.layout.row, parent, false);
其中context将是构造函数中初始化的context类型的局部变量。

请尝试以下操作:

public class NoteAdapter extends ArrayAdapter<Note> {

    LayoutInflater mInflater;
    List<Note> list;
    public NoteAdapter(Context context, int resource, int textViewResourceId, List<Note> objects) {
        super(context, resource, textViewResourceId, objects);
        mInflater=LayoutInflater.from(context);
        list=objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;

        if(convertView==null){
             convertView=mInflater.inflate(R.layout.listitem_layout,null);// R.layout.listitem_layout is your custom layout file
             holder=new ViewHolder();

             holder.title=(TextView)convertView.findViewById(R.id.noteTitle);
             holder.time=(TextView)convertView.findViewById(R.id.noteTime);
             holder.date=(TextView)convertView.findViewById(R.id.noteDate);
             convertView.setTag(holder);
        }
        else{
             holder=(ViewHolder)convertView.getTag();
        }

        Note note=list.get(position);

        holder.title.setText(note.getTitle());
        holder.title.setTextColor(Color.parseColor(note.getColor()));
        holder.time.setText(note.getTime());
        holder.date.setText(note.getDate());      

        return convertView;
    }
    class ViewHolder{
        TextView title;
        TextView time;
        TextView date;
    }
}
公共类NoteAdapter扩展了ArrayAdapter{
拉平机;
名单;
公共NoteAdapter(上下文上下文、int资源、int textViewResourceId、列表对象){
超级(上下文、资源、textViewResourceId、对象);
mInflater=LayoutInflater.from(上下文);
列表=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
convertView=mInflater.inflate(R.layout.listitem_布局,null);//R.layout.listitem_布局是您的自定义布局文件
holder=新的ViewHolder();
holder.title=(TextView)convertView.findViewById(R.id.noteTitle);
holder.time=(TextView)convertView.findViewById(R.id.noteTime);
holder.date=(TextView)convertView.findViewById(R.id.noteDate);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
Note=list.get(位置);
holder.title.setText(note.getTitle());
holder.title.setTextColor(Color.parseColor(note.getColor());
holder.time.setText(note.getTime());
holder.date.setText(note.getDate());
返回视图;
}
类视图持有者{
文本视图标题;
文本查看时间;
文本查看日期;
}
}

第24行的NoteAdapter中有什么?使用ViewHolder@iulia它是这个部分:
View row=super.getView(position,convertView,parent)尝试这样实现:
LayoutInflater inflater=getLayoutInflater();视图行=充气机。充气(R.layout.note,parent,false)
,但现在收到此错误消息:
类型NoteAdapter的getLayoutInflater()方法未定义
是否应创建此方法?如何?检查我的编辑,而不是我已经包括了什么是缺少的ie.LayoutInflater.from(上下文);我尝试了,但无法实例化上下文变量…:-/不过,非常感谢你的帮助!非常感谢!没关系。下面是如何实例化上下文变量在自定义适配器中声明全局上下文变量,比如说上下文上下文;在构造函数公共NoteAdapter中实例化它,如下所示;我确实做了正确的事情,但是Eclipse告诉我这个变量赋值不会有任何效果。。。所以很明显,我确实实例化了它:)我试过了,它成功了!非常感谢你!!现在只需对XML进行一些修改。。。
LayoutInflater inflater=LayoutInflater.from(context);
View row=inflater.inflate(R.layout.row, parent, false);
public class NoteAdapter extends ArrayAdapter<Note> {

    LayoutInflater mInflater;
    List<Note> list;
    public NoteAdapter(Context context, int resource, int textViewResourceId, List<Note> objects) {
        super(context, resource, textViewResourceId, objects);
        mInflater=LayoutInflater.from(context);
        list=objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;

        if(convertView==null){
             convertView=mInflater.inflate(R.layout.listitem_layout,null);// R.layout.listitem_layout is your custom layout file
             holder=new ViewHolder();

             holder.title=(TextView)convertView.findViewById(R.id.noteTitle);
             holder.time=(TextView)convertView.findViewById(R.id.noteTime);
             holder.date=(TextView)convertView.findViewById(R.id.noteDate);
             convertView.setTag(holder);
        }
        else{
             holder=(ViewHolder)convertView.getTag();
        }

        Note note=list.get(position);

        holder.title.setText(note.getTitle());
        holder.title.setTextColor(Color.parseColor(note.getColor()));
        holder.time.setText(note.getTime());
        holder.date.setText(note.getDate());      

        return convertView;
    }
    class ViewHolder{
        TextView title;
        TextView time;
        TextView date;
    }
}