Android 使用自定义适配器的ListView不显示任何内容
我有SQLite DB,我正在尝试在listView中显示查询的值。 我按照教程为listView创建了一个自定义适配器。也用作参考问题Android 使用自定义适配器的ListView不显示任何内容,android,listview,adapter,Android,Listview,Adapter,我有SQLite DB,我正在尝试在listView中显示查询的值。 我按照教程为listView创建了一个自定义适配器。也用作参考问题 我无法看到listView上显示的任何数据 自定义listView行应该有3项-描述、日期和金额(视图以xml定义)。这些值是从数据库中获取的。从db获取的数据看起来很好 我的自定义适配器代码: public class TransactionListAdapter extends BaseAdapter { Context context;
我无法看到listView上显示的任何数据 自定义listView行应该有3项-描述、日期和金额(视图以xml定义)。这些值是从数据库中获取的。从db获取的数据看起来很好 我的自定义适配器代码:
public class TransactionListAdapter extends BaseAdapter {
Context context;
ArrayList<TransactionItem> transactionList;
// Code for TransactionItem class : https://gist.github.com/bharatkrishna/5175105
public TransactionListAdapter(Context context, ArrayList<TransactionItem> list) {
this.context = context;
transactionList = list;
}
@Override
public int getCount() {
return transactionList.size();
}
@Override
public Object getItem(int position) {
return transactionList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("adpater", "I am in adapter"); // Doesn't seem to get to this point as I don't see the log message
View element;
TransactionItem transactionItem = transactionList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
element = inflater.inflate(R.layout.row_entry, null);
} else {
element = convertView;
}
// Code of XML file with these widgets defined: https://gist.github.com/bharatkrishna/5175158
TextView descTextView = (TextView) convertView.findViewById(R.id.descText_Report);
descTextView.setText(transactionItem.getDescription());
TextView dateTextView = (TextView) convertView.findViewById(R.id.dateText_Report);
dateTextView.setText(transactionItem.getDate());
TextView amountTextView = (TextView) convertView.findViewById(R.id.amountText_Report);
amountTextView.setText(Float.toString(transactionItem.getAmount()));
return convertView;
}
}
convertView.findViewById()存在错误,当convertView为空时,此操作可能会失败,并且将失败。当第一次使用适配器并且最初没有传入convertView时,就会发生这种情况 我建议:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("adpater", "I am in adapter"); // Doesn't seem to get to this point as I don't see the log message
TransactionItem transactionItem = transactionList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_entry, null);
}
// Code of XML file with these widgets defined: https://gist.github.com/bharatkrishna/5175158
TextView descTextView = (TextView) convertView.findViewById(R.id.descText_Report);
descTextView.setText(transactionItem.getDescription());
TextView dateTextView = (TextView) convertView.findViewById(R.id.dateText_Report);
dateTextView.setText(transactionItem.getDate());
TextView amountTextView = (TextView) convertView.findViewById(R.id.amountText_Report);
amountTextView.setText(Float.toString(transactionItem.getAmount()));
return convertView;
}
convertView.findViewById()存在错误,当convertView为空时,此操作可能会失败,并且将失败。当第一次使用适配器并且最初没有传入convertView时,就会发生这种情况 我建议:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("adpater", "I am in adapter"); // Doesn't seem to get to this point as I don't see the log message
TransactionItem transactionItem = transactionList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_entry, null);
}
// Code of XML file with these widgets defined: https://gist.github.com/bharatkrishna/5175158
TextView descTextView = (TextView) convertView.findViewById(R.id.descText_Report);
descTextView.setText(transactionItem.getDescription());
TextView dateTextView = (TextView) convertView.findViewById(R.id.dateText_Report);
dateTextView.setText(transactionItem.getDate());
TextView amountTextView = (TextView) convertView.findViewById(R.id.amountText_Report);
amountTextView.setText(Float.toString(transactionItem.getAmount()));
return convertView;
}
试试这个
您尚未将事务对象设置为列表,因此列表为空
加上这个
transactionList.add(transactionItem);
在showList()方法的while循环中
您尚未将事务对象设置为列表,因此列表为空
加上这个
transactionList.add(transactionItem);
在showList()
方法的while循环中我认为您应该将convertview替换为元素..如下所示
TextView descTextView = (TextView) element.findViewById(R.id.descText_Report);
descTextView.setText(transactionItem.getDescription());
TextView dateTextView = (TextView) element.findViewById(R.id.dateText_Report);
dateTextView.setText(transactionItem.getDate());
TextView amountTextView = (TextView) element.findViewById(R.id.amountText_Report);
amountTextView.setText(Float.toString(transactionItem.getAmount()));
return element;
我想你应该把convertview换成element.像这样
TextView descTextView = (TextView) element.findViewById(R.id.descText_Report);
descTextView.setText(transactionItem.getDescription());
TextView dateTextView = (TextView) element.findViewById(R.id.dateText_Report);
dateTextView.setText(transactionItem.getDate());
TextView amountTextView = (TextView) element.findViewById(R.id.amountText_Report);
amountTextView.setText(Float.toString(transactionItem.getAmount()));
return element;
你检查过TransactionItem是否有数据吗?我已经在那里输入了一个日志&我可以看到它到达setDescription并打印Description的值,但没有到达getDescription。这是我的TransactionItem代码:您检查过TransactionItem是否有数据吗?我在其中输入了一个日志&我可以看到它到达setDescription并打印Description的值,但没有到达getDescription。这是我的交易代码项目:是的,我同意。我在修改代码。我现在完全摆脱了元素和那个else条件,只使用contextView。布拉格纳尼提到了这个bug。谢谢你的帮助:)是的,我同意。我在修改代码。我现在完全摆脱了元素和那个else条件,只使用contextView。布拉格纳尼提到了这个bug。谢谢你的帮助:)谢谢。我意识到了这一点,现在就改变了。这是一个bug,但真正的bug是@Pragnani发现的。现在修好了,谢谢。我意识到了这一点,现在就改变了。这是一个bug,但真正的bug是@Pragnani发现的。现在修好了。