如何获取listView元素的计数

时间:2017-04-16 03:44:50

标签: android listview

我目前正在为我的移动应用开发类编写一个提示跟踪器应用程序,它将接受来自EditText字段的用户输入并将信息保存到数据库。每次" Save"单击按钮,整个布局中的所有条目都将添加到以不同布局显示的单个listView中。我有数据库工作,我可以添加和删除元素,但我想知道是否有办法获得当前显示的listView数量?我知道有办法计算数据库中的行数,但是有可能获得listViews的数量吗?

这就是我的布局目前的样子。每个listView都是我拍摄的披萨配送,所有信息都显示在每个配送中。我想知道是否可以在页面上获取listView的数量,以便我可以在" DEL"下面创建一个TextView。按钮说"交货#"并拥有当前的参赛人数。

enter image description here

我将每个添加到数据库的代码如下:

public void onClick(View view){

    name = (EditText) findViewById(R.id.name);
    number = (EditText) findViewById(R.id.number);
    address = (EditText) findViewById(R.id.address);
    orderTotal = (EditText) findViewById(R.id.orderTotal);
    amountReceived = (EditText) findViewById(R.id.amountReceived);
    tip = (EditText) findViewById(R.id.tip);
    mileage = (EditText) findViewById(R.id.mileage);
    grandTotal = (EditText) findViewById(R.id.grandTotal);

    String cName = name.getText().toString();
    String num = number.getText().toString();
    String cAddress = address.getText().toString();
    String cOrderTotal = orderTotal.getText().toString();
    String cAmountReceived = amountReceived.getText().toString();
    String cTip = tip.getText().toString();
    String cMileage = mileage.getText().toString();
    String cGrandTotal = grandTotal.getText().toString();


    int id = db.addContact(new PhoneBook(cName, num, cAddress, cOrderTotal,
                                          cAmountReceived, cTip, cMileage, cGrandTotal));
    contactList.add(new PhoneBook(id, cName, num, cAddress, cOrderTotal,
                                   cAmountReceived, cTip, cMileage, cGrandTotal));
    adapter.notifyDataSetChanged();

    Toast.makeText(getApplicationContext(), "Entry Successfully Created.", Toast.LENGTH_LONG).show();
}

如果有任何我遗失的东西会指向正确的方向以获得某人的解决方案,我会很乐意添加它。谢谢你的时间。

编辑:

我的自定义适配器代码:

@Override
public int getCount() {
    return contactList.size();
}

@Override
public Object getItem(int position) {
    return contactList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

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

    if (inflater == null)
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.contact_entry, null);

    TextView name= (TextView) convertView.findViewById(R.id.contactName);
    TextView contact = (TextView) convertView.findViewById(R.id.contactNumber);
    TextView address = (TextView) convertView.findViewById(R.id.addressConverted);
    TextView orderTotal = (TextView) convertView.findViewById(R.id.orderTotalConverted);
    TextView amountReceived = (TextView) convertView.findViewById(R.id.amountReceivedConverted);
    TextView tip = (TextView) convertView.findViewById(R.id.tipConverted);
    TextView mileage = (TextView) convertView.findViewById(R.id.mileageConverted);
    TextView grandTotal = (TextView) convertView.findViewById(R.id.grandTotalConverted);
    Button delete = (Button) convertView.findViewById(R.id.delete);

    PhoneBook list = contactList.get(position);

    name.setText(list.getName());
    contact.setText(list.getPhoneNumber());
    address.setText(list.getAddress());
    orderTotal.setText(list.getOrderTotal());
    amountReceived.setText(list.getAmountReceived());
    tip.setText(list.getTip());
    mileage.setText(list.getMileage());
    grandTotal.setText(list.getGrandTotal());
    delete.setOnClickListener(new ListItemClickListener(position, list));

    return convertView;
}


private class ListItemClickListener implements View.OnClickListener {

    int position;
    PhoneBook list;

    public ListItemClickListener(int position, PhoneBook list){
        this.position = position;
        this.list = list;
    }

    @Override
    public void onClick(View v) {

        PhoneBookHandler db = new PhoneBookHandler(activity);
        db.deleteContact(list);
        contactList.remove(position);
        notifyDataSetChanged();
    }
}

3 个答案:

答案 0 :(得分:1)

如果您使用的是listView,我可以假设您也使用了适配器,因此您可以使用“getCount()”获取总数。

但是,您是否想要在屏幕上显示的视图数量或总视图数量并不是很清楚。如果您正在查找显示的视图数量,请忽略我的答案。

编辑:对于列表视图中当前的视图编号(而不是问题标题中的列表视图计数),您需要更新适配器。您必须创建自定义适配器,并覆盖

public View getView(int position, View convertView, ViewGroup parent)

您要找的号码是“位置”。我假设您已经知道如何在应用程序屏幕截图的情况下制作自定义适配器。如果您需要帮助创建自定义适配器,我建议搜索(并询问)另一个问题。

答案 1 :(得分:1)

listView.getAdapter()。getCount()应该为您提供listview中的行数。您可以使用它将TextView设置为:

myTextView.setText("Delivery #"+listView.getAdapter().getCount());

更新:

对于您想要实现的目标,请不要使用getCount()。这是因为,get count将为您提供列表中的总行数。因此,您的所有行都将具有相同的值。请在适配器的getView()方法中使用以下代码。

//First add a text field to your contact_entry layout
//lets say the text field id is deliveryNum
TextView deliveryNumber = (TextView) convertView.findViewById(R.id.deliveryNum);

//Now set text as position variable + 1 because position start from 0
deliveryNumber.setText("Delivery #"+(position+1));

那是

答案 2 :(得分:0)

如果您使用的是listView,那么您也有适配器,因此您可以使用“getCount()”获取总数。

如果您想要布局的建议,我附上了一张图片,请检查一下。enter image description here

保留标签名称和标签名称,您可以像删除按钮一样自定义为递送并删除编辑按钮

为此我使用了RecyclerListView。