[英]Android coustom Listview is not showing
UserInfo模型具有三个字段,名称,电子邮件,照片,但只想在列表视图上显示名称。 当用户单击列表视图时,将获得所有字段,例如姓名,照片电子邮件
也想在列表视图中设置过滤器
我的Listview适配器类
public class UsersAdapter extends ArrayAdapter<UserInfo> {
ArrayList<UserInfo> users;
Context context;
LayoutInflater inflater;
public UsersAdapter(Context context, ArrayList<UserInfo> users) {
super(context,R.id.tvName, users);
this.users= users;
this.context= context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.items, null);
holder = new Holder();
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvName.setText(users.get(position).getName());
return convertView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public UserInfo getItem(int position) {
// TODO Auto-generated method stub
return users.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
private class Holder {
TextView tvName;
}
问题是getcount方法,应如下所示。
@Override
public int getCount () {
return users.size();
}
ArrayAdapter已经实现了getItem(),getCount()方法并存储了显示项的ArrayList,因此
如果使用ArrayAdapter<UserInfo>
,则无需保存
private ArrayList<UserInfo> users;
因为在您的实例中,您的构造函数赋予了super
super(context,R.id.tvName, users) //users <-- the List<>
因此,您可以删除函数,因为ArrayAdapter已经实现了它们
@Override
public int getCount() {
return 0;
}
@Override
public UserInfo getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
并且在您的createView()中,您应该像这样使用getItem(position)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.items, convertView, false);
holder = new Holder();
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvName.setText(getItem(position).getName()); //<--------------
return convertView;
}
正如用户apk所说,您的getCount()
方法需要显示适配器上有多少个项目,并且也不需要使用[LayoutInflater][1]
作为全局变量。 最重要的是,您忘记初始化充气机。
因此,这是您必须做的:
1-修复您的getCount()(感谢apk注意到)
@Override
public int getCount () {
return users.size();
}
2-您仍然可以将LayoutInflater用作全局变量,但实际上并不需要。 无论如何,请在您的getView方法上尝试执行以下操作:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView == null) {
inflater = (LayoutInflater) context_.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); // Use this to get the inflater.
convertView = inflater.inflate(R.layout.items, null);
holder = new Holder();
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvName.setText(users.get(position).getName());
return convertView;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.