0

ListView 有时显示值,有时不显示
我正在尝试制作一个使用 Bissection 方法来查找函数的近似根的应用程序。App进行计算并将结果显示在listView中,它在大多数情况下都可以正常工作,但经过一些测试,我发现某些函数的结果没有显示出来。

例如,从 1 到 3 的 x^3-9x+3 有效,但从 0 到 1 无效。

img http://i.stack.imgur.com/yvEzz.png

  • 尝试调试并且两个输入都通过相同的代码行,一切似乎都很好。Logcat 中没有显示任何内容。
  • ListView 正在工作,因为对于某些输入,它会显示值
  • ArrayAdapter 的工作原理与 listView 相同,也是因为示例中的两个数组具有相似的双精度值。这应该不是问题


我错过了什么?

代码:

setListAdapter(new BisseccaoAdapter(a_array, b_array, c_array, fc_array));

class BisseccaoAdapter extends BaseAdapter {

    double[] a2, b2, c2, fc2;


    BisseccaoAdapter() {
        a2 = null;
        b2 = null;
        c2 = null;
        fc2 = null;
    }

    public BisseccaoAdapter(double[] a_array, double[] b_array,
            double[] c_array, double[] fc_array) {

        a2 = a_array;
        b2 = b_array;
        c2 = c_array;
        fc2 = fc_array;

    }

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

        ViewHolderItem viewHolder;
        if(convertView==null){

            // inflate the layout
            LayoutInflater inflater = getLayoutInflater();
            convertView = inflater.inflate(R.layout.linha_listview, parent, false);

            // set up the ViewHolder
            viewHolder = new ViewHolderItem();
            viewHolder.i = (TextView) convertView.findViewById(R.id.lista_i);
            viewHolder.at = (TextView) convertView.findViewById(R.id.lista_a);
            viewHolder.bt= (TextView) convertView.findViewById(R.id.lista_b);
            viewHolder.ct = (TextView) convertView.findViewById(R.id.lista_c);
            viewHolder.fct = (TextView) convertView.findViewById(R.id.lista_fc);

            // store the holder with the view.
            convertView.setTag(viewHolder);

        }else{

            viewHolder = (ViewHolderItem) convertView.getTag();
        }

        // assign values if the object is not null
        if(a2.length != 0) {
            // get the TextView from the ViewHolder and then set the text (item name) and tag (item ID) values
            viewHolder.i.setText(Integer.toString(position + 1));
            viewHolder.at.setText(new DecimalFormat("#.#######").format(a2[position]));
            viewHolder.bt.setText(new DecimalFormat("#.#######").format(b2[position]));
            viewHolder.ct.setText(new DecimalFormat("#.########").format(c2[position]));
            viewHolder.fct.setText(new DecimalFormat(".#######E0").format(fc2[position]));
        }

        return convertView;
    }

    @Override
    public int getCount() {

        for (i = 0; i < a2.length; i++) {
            if (a2[i] == 0) {
                break;
            }

        }

        return i;
    }

    @Override
    public Object getItem(int position) {

        return null;
    }

    @Override
    public long getItemId(int position) {

        return position;
    }
}
4

1 回答 1

0

在 getCount() 中,您需要返回数组的计数。检查在 0 到 1 的情况下,是否 a2[i] ==0,如果是,则 i 将作为计数返回,而您需要在此处返回 a2.length。getCount() 导致调用 getView() 然后负责在屏幕上呈现视图。

例如,在 0 到 1 的情况下,a2[0] == 0,然后 i = 0,将返回,因此框架将知道由于 count 为 0,因此没有任何内容可显示。

所以你应该返回a2.length。

将所有这些数组捆绑在一个类中并使用类实例的数组列表并返回列表的大小会更好getCount()

于 2014-03-15T05:33:21.587 回答