Android 使用自定义适配器的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;

我有SQLite DB,我正在尝试在listView中显示查询的值。 我按照教程为listView创建了一个自定义适配器。也用作参考问题


我无法看到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发现的。现在修好了。