簡體   English   中英

Android Coustom Listview未顯示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM