Android - 在ListView

时间:2016-06-12 12:52:19

标签: android android-layout listview textview android-cursoradapter

我想要什么:我有一个列表视图,列出了我的sqlite数据库的所有条目。该数据库包含许多人在超市购买的所有商品,因此列表视图显示数据库中的所有商品。现在,一个项目可以被许多用户共享(事实上,应用程序即将拆分收据的成本),我希望共享该特定项目的人的姓名必须显示在列表视图中的该项目下。 / p>

以常见方式使用cursoradapter的结果:

1)row1项目数量价格
2)row2项目数量价格
3)row3项目数量价格
4)......

我想要的结果:

1)row1项目数量价格名称1
名称2
2)row2项目数量价格
名称4
名称7
3)row3项目数量价格名称2
4)......

名称行是我想要添加的文本视图(http://pastebin.com/hzLPPV6B

我尝试过做什么

问题是什么:问题是bindview方法无法按预期工作,应用程序开始显示无限(我认为)人名textview(第3个pastebin链接)的数量在列表中的每个项目下(不仅是我想要的人名)。

这是bindView中的代码部分,我不确定:

LinearLayout itemBuyersLinearLayout = (LinearLayout) view.findViewById(R.id.itemBuyersReceipt);
ArrayList<String> buyersName = dbManager.getBuyersNameOfItem(receiptId, cursorAdapter.getItemId(cursor.getPosition()));
for (int i=0;i<buyersName.size();i++) {
       itemBuyersLinearLayout.addView(getLayoutInflater().inflate(R.layout.receipt_item_buyer_receipt, itemBuyersLinearLayout, false));
       TextView buyerNameTextView = (TextView) itemBuyersLinearLayout.findViewById(R.id.itemBuyerReceipt);
       buyerNameTextView.setText(buyersName.get(i));
}

我不知道我要做什么/我需要添加一些代码来添加额外信息

1 个答案:

答案 0 :(得分:1)

当您使用CursorAdapter时,bindView方法用于将数据绑定到单个行项目,并为所有行执行此操作。你在这里做的是你有一个for循环,用于将所有数据绑定到单个行项目。

我不确定你的数据库是如何设置的,但你应该用这样的格式绑定它:

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.YOUR_ROW_ITEM_XML, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView buyerNameTextView = (TextView) view.findViewById(R.id.itemBuyerReceipt);
    String buyerName = cursor.getString(cursor.getColumnIndexOrThrow("YOUR_BUYER_NAME_COLUMN"));
    buyerNameTextView.setText(buyerName);
}
希望能解决你的问题。祝你好运!