如何使用从数据库加载的数字ListView的总和设置TextView值

时间:2015-03-05 13:20:51

标签: java android android-listview simplecursoradapter

我有一个由FragmentListView组成的TextView。 ListView包含多个TextView,其中包含通过自定义SimpleCursorAdapterCursorLoader从数据库加载的数值。所以这些值在显示后是静态的。我想对值进行求和,并在单独的TextView中直接显示总数。 我该怎么做?我的意思是从用户的角度来看,列表和总数必须同时显示。我可以使用额外的加载器来单独获取总数,但我想避免这种情况。那么我应该在哪个点上加上求和逻辑?

我有这样的查询,其中每行将填充listView的项目:

SELECT group_name, group_amount FROM notes;

我不想执行如下单独的查询来计算总金额,我希望尽可能安全地从GUI中获取

SELECT sum(group_amount) FROM notes;

这是我的代码:

FRAGMENT onCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.monthly_report, container, false);
        ListView listCosts = (ListView)rootView.findViewById(R.id.list_costs);
        costsAdapter = new VehReportAdapter(getActivity(), 
                    com.vortexalex.vehnotes.R.layout.monthly_report_single_item, null,
                    VehReportAdapter.fromColumns, toViews, 0);
        listCosts.setAdapter(costsAdapter);
}

FRAMENT onActivityCreated

public void onActivityCreated(Bundle savedInstanceState) {
        getLoaderManager().initLoader(VehTabsUtil.REPORT_COSTS_LOADER_ID, null, (LoaderCallbacks<Cursor>) this); 
}

FRAGMENT onLoaderFinished

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {  
    costsAdapter.swapCursor(cursor);
}

ADAPTER bindView(适配器extends SimpleCursorAdapter

public void bindView(View view, Context context, Cursor cursor) {
    Integer dbAmount = cursor.getInt(cursor.getColumnIndex(AccountingContract.Report.COLUMN_NAME_GROUP_AMOUNT));
    String amount = NumberUtil.formatAmount(dbAmount);
    ((TextView) view.findViewById(com.vortexalex.vehnotes.R.id.report_item_amount)).setText(amount);        

}

FRAGMENT LAYOUT montly_report.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:orientation="vertical"
    android:padding="6dip" >

    <ListView android:id="@+id/list_costs"
               android:layout_width="wrap_content"
               android:layout_height="0dip"
               android:layout_weight="2"
               android:drawSelectorOnTop="false"/>

    <TextView 
        android:id="@+id/costs_sum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:padding="6dip"
     />
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的列表视图中有数字,并且您想要列表视图中每个值的总和。

要在列表视图中的每个值上实现此循环,请使用String将值从int转换为Integer.parseInt(String str),将它们全部添加并转换生成的int使用String返回Integer.toString(int i),并使用String在文本视图中插入结果yourTextView.setText(resultString)