Android 选择选项卡后刷新片段

Android 选择选项卡后刷新片段,android,android-fragments,Android,Android Fragments,构建片段时,我根据本地数据库中的信息构建视图。其他选项卡可以修改此信息,当用户选择该选项卡时,我希望新信息得到反映 public class RunningTotal extends SherlockFragment { public static final String TAG = "Running Total"; private LinearLayout lv; public View onCreateView(LayoutInflater li, ViewGro

构建片段时,我根据本地数据库中的信息构建视图。其他选项卡可以修改此信息,当用户选择该选项卡时,我希望新信息得到反映

public class RunningTotal extends SherlockFragment {
    public static final String TAG = "Running Total";
    private LinearLayout lv;

    public View onCreateView(LayoutInflater li, ViewGroup vg,
            Bundle savedInstanceState) {
        SalesDataSource sds = BarcodeSaleTracker.SDS;

        ArrayList<Item> items = sds.getAllItems();
        String[] totals = sds.getPersonValues();
        int totalsPosition = 0;
        Log.v(TAG, "Items Length: " + items.size());

        lv = new LinearLayout(this.getActivity());

        String lastPerson = "";

        if (items.size() > 0) {
            for (Item i : items) {
                if (lastPerson.equalsIgnoreCase(i.getPerson()) == false) {
                    lastPerson = i.getPerson();
                    TextView tv = (TextView) li.inflate(R.layout.list_title,
                            lv, false);
                    tv.setText(totals[totalsPosition]);
                    totalsPosition++;
                    lv.addView(tv);
                }

                TextView listItem = (TextView) li.inflate(R.layout.list_item,
                        lv, false);
                listItem.setText(i.toString());
                lv.addView(listItem);
            }
        } else {
            TextView noItems = (TextView) li.inflate(R.layout.list_title, lv,
                    false);
            noItems.setText(R.string.no_items);
            lv.addView(noItems);
        }

        return lv;
    }
}
我只是不知道如何与RunningTotal沟通,它需要自我更新

编辑添加了我从数据库请求的所有数据的来源

public class SalesDataSource {
    private SQLiteDatabase database;
    private DatabaseHelper dbHelper;
    private String[] allColumns = { DatabaseHelper.COLUMN_ID,
            DatabaseHelper.COLUMN_PERSON, DatabaseHelper.COLUMN_COST,
            DatabaseHelper.COLUMN_ITEM };

    public SalesDataSource(Context context) {
        dbHelper = new DatabaseHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    /**
     * Creates an entry in the Database. Both a person and a cost are required.
     * Item is not required. If one is not needed, simply pass null.
     * 
     * @param person
     *            Who this sale belongs to.
     * @param cost
     *            The amount (in pennies) that the sale was.
     * @param item
     *            An optional description of the sold item
     * @return The newly created Item.
     */
    public Item addItem(String person, int cost, String item) {
        ContentValues values = new ContentValues();

        values.put(DatabaseHelper.COLUMN_PERSON, person);
        values.put(DatabaseHelper.COLUMN_COST, cost);
        values.put(DatabaseHelper.COLUMN_ITEM, item);

        long insertId = database.insert(DatabaseHelper.TABLE_SALES, null,
                values);

        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES, allColumns,
                DatabaseHelper.COLUMN_ID + " = " + insertId, null, null, null,
                null);

        cursor.moveToFirst();
        Item rv = cursorToItem(cursor);
        cursor.close();

        return rv;
    }

    public void addItems(List<Item> items) {
        for (Item i : items) {
            ContentValues values = new ContentValues();

            values.put(DatabaseHelper.COLUMN_PERSON, i.getPerson());
            values.put(DatabaseHelper.COLUMN_COST, i.getAmount());
            values.put(DatabaseHelper.COLUMN_ITEM, i.getItem());

            database.insert(DatabaseHelper.TABLE_SALES, null, values);
        }
    }

    public ArrayList<Item> getAllItems() {
        ArrayList<Item> items = new ArrayList<Item>();

        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES, allColumns,
                null, null, null, null, DatabaseHelper.COLUMN_PERSON);

        cursor.moveToFirst();

        while (!cursor.isAfterLast()) {
            Item item = cursorToItem(cursor);
            items.add(item);
            cursor.moveToNext();
        }

        cursor.close();

        return items;
    }

    public String[] getPersonValues() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "SUM(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.PERSON_SUM,
                        DatabaseHelper.COLUMN_PERSON }, null, null,
                DatabaseHelper.COLUMN_PERSON, null, null);
        String[] rv = new String[cursor.getCount()];

        cursor.moveToFirst();
        int pos = 0;
        while (!cursor.isAfterLast()) {
            String person = cursor.getString(1);
            String money = Item.format(cursor.getInt(0));
            rv[pos++] = person + ": " + money;
            cursor.moveToNext();
        }

        cursor.close();

        return rv;
    }

    public Item getMaxSale() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "MAX(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.MAX_SALE,
                        DatabaseHelper.COLUMN_PERSON }, null, null, null, null,
                null);

        cursor.moveToFirst();


        Item rv = cursorToItem(cursor);
        cursor.close();
        return rv;

    }

    public Item getMinSale() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "MIN(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.MIN_SALE,
                        DatabaseHelper.COLUMN_PERSON }, null, null, null, null,
                null);

        cursor.moveToFirst();

        Item rv = cursorToItem(cursor);
        cursor.close();
        return rv;

    }

    private Item cursorToItem(Cursor cursor) {
        Item item = new Item();

        item.setId(cursor.getLong(0));
        item.setPerson(cursor.getString(1));
        item.setAmount(cursor.getInt(2));
        item.setItem(cursor.getString(3));

        return item;
    }
}
公共类SalesDataSource{
专用数据库;
私有数据库助手dbHelper;
私有字符串[]allColumns={DatabaseHelper.COLUMN\u ID,
DatabaseHelper.COLUMN\u人员,DatabaseHelper.COLUMN\u成本,
DatabaseHelper.COLUMN_ITEM};
公共SalesDataSource(上下文){
dbHelper=新数据库助手(上下文);
}
public void open()引发SQLException{
database=dbHelper.getWritableDatabase();
}
公众假期结束(){
dbHelper.close();
}
/**
*在数据库中创建条目。需要人员和成本。
*不需要项。如果不需要项,只需传递null即可。
* 
*@param-person
*这是谁的买卖。
*@param成本
*出售的金额(以便士计)。
*@param项目
*已售出商品的可选描述
*@返回新创建的项目。
*/
公共项目附加项(字符串个人、整数成本、字符串项目){
ContentValues=新的ContentValues();
value.put(DatabaseHelper.COLUMN\u PERSON,PERSON);
value.put(DatabaseHelper.COLUMN_COST,COST);
value.put(DatabaseHelper.COLUMN_ITEM,ITEM);
long insertId=database.insert(DatabaseHelper.TABLE_,null,
价值观);
Cursor Cursor=database.query(DatabaseHelper.TABLE_SALES,allColumns,
DatabaseHelper.COLUMN_ID+“=”+插入ID,null,null,null,
无效);
cursor.moveToFirst();
项目rv=光标项目(光标);
cursor.close();
返回rv;
}
公共无效附加项(列表项){
用于(项目i:项目){
ContentValues=新的ContentValues();
value.put(DatabaseHelper.COLUMN_PERSON,i.getPerson());
value.put(DatabaseHelper.COLUMN_COST,i.getAmount());
value.put(DatabaseHelper.COLUMN_ITEM,i.getItem());
insert(DatabaseHelper.TABLE_SALES,null,value);
}
}
公共数组列表getAllItems(){
ArrayList items=新建ArrayList();
Cursor Cursor=database.query(DatabaseHelper.TABLE_SALES,allColumns,
null,null,null,null,DatabaseHelper.COLUMN\u PERSON);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
项目=游标项目(游标);
项目。添加(项目);
cursor.moveToNext();
}
cursor.close();
退货项目;
}
公共字符串[]getPersonValues(){
游标=database.query(DatabaseHelper.TABLE_SALES,
新字符串[]{“SUM(“+DatabaseHelper.COLUMN_COST+”)为“+DatabaseHelper.PERSON_SUM,
DatabaseHelper.COLUMN_PERSON},null,null,
DatabaseHelper.COLUMN_PERSON,null,null);
String[]rv=新字符串[cursor.getCount()];
cursor.moveToFirst();
int pos=0;
而(!cursor.isAfterLast()){
字符串person=cursor.getString(1);
字符串money=Item.format(cursor.getInt(0));
rv[pos++]=人+“:”+钱;
cursor.moveToNext();
}
cursor.close();
返回rv;
}
公共项目getMaxSale(){
游标=database.query(DatabaseHelper.TABLE_SALES,
新字符串[]{“MAX(“+DatabaseHelper.COLUMN_COST+”)为“+DatabaseHelper.MAX_SALE,
DatabaseHelper.COLUMN_PERSON},null,null,null,null,
无效);
cursor.moveToFirst();
项目rv=光标项目(光标);
cursor.close();
返回rv;
}
公共项目getMinSale(){
游标=database.query(DatabaseHelper.TABLE_SALES,
新字符串[]{“MIN(“+DatabaseHelper.COLUMN_COST+”)为“+DatabaseHelper.MIN_SALE,
DatabaseHelper.COLUMN_PERSON},null,null,null,null,
无效);
cursor.moveToFirst();
项目rv=光标项目(光标);
cursor.close();
返回rv;
}
专用项游标项目(游标){
项目=新项目();
item.setId(cursor.getLong(0));
item.setPerson(cursor.getString(1));
item.setAmount(cursor.getInt(2));
item.setItem(cursor.getString(3));
退货项目;
}
}

为什么不使用listfragment和loadermanager来管理游标对象,以便在基础数据更改时自动更新列表?

问题在于它不仅仅是一个简单的Curosr对象。我正在使用多个游标对象,并转换一些数据。我已经用我的SalesDataSource更新了我的原始帖子。然后你可以使用ContentObserver
public class SalesDataSource {
    private SQLiteDatabase database;
    private DatabaseHelper dbHelper;
    private String[] allColumns = { DatabaseHelper.COLUMN_ID,
            DatabaseHelper.COLUMN_PERSON, DatabaseHelper.COLUMN_COST,
            DatabaseHelper.COLUMN_ITEM };

    public SalesDataSource(Context context) {
        dbHelper = new DatabaseHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    /**
     * Creates an entry in the Database. Both a person and a cost are required.
     * Item is not required. If one is not needed, simply pass null.
     * 
     * @param person
     *            Who this sale belongs to.
     * @param cost
     *            The amount (in pennies) that the sale was.
     * @param item
     *            An optional description of the sold item
     * @return The newly created Item.
     */
    public Item addItem(String person, int cost, String item) {
        ContentValues values = new ContentValues();

        values.put(DatabaseHelper.COLUMN_PERSON, person);
        values.put(DatabaseHelper.COLUMN_COST, cost);
        values.put(DatabaseHelper.COLUMN_ITEM, item);

        long insertId = database.insert(DatabaseHelper.TABLE_SALES, null,
                values);

        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES, allColumns,
                DatabaseHelper.COLUMN_ID + " = " + insertId, null, null, null,
                null);

        cursor.moveToFirst();
        Item rv = cursorToItem(cursor);
        cursor.close();

        return rv;
    }

    public void addItems(List<Item> items) {
        for (Item i : items) {
            ContentValues values = new ContentValues();

            values.put(DatabaseHelper.COLUMN_PERSON, i.getPerson());
            values.put(DatabaseHelper.COLUMN_COST, i.getAmount());
            values.put(DatabaseHelper.COLUMN_ITEM, i.getItem());

            database.insert(DatabaseHelper.TABLE_SALES, null, values);
        }
    }

    public ArrayList<Item> getAllItems() {
        ArrayList<Item> items = new ArrayList<Item>();

        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES, allColumns,
                null, null, null, null, DatabaseHelper.COLUMN_PERSON);

        cursor.moveToFirst();

        while (!cursor.isAfterLast()) {
            Item item = cursorToItem(cursor);
            items.add(item);
            cursor.moveToNext();
        }

        cursor.close();

        return items;
    }

    public String[] getPersonValues() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "SUM(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.PERSON_SUM,
                        DatabaseHelper.COLUMN_PERSON }, null, null,
                DatabaseHelper.COLUMN_PERSON, null, null);
        String[] rv = new String[cursor.getCount()];

        cursor.moveToFirst();
        int pos = 0;
        while (!cursor.isAfterLast()) {
            String person = cursor.getString(1);
            String money = Item.format(cursor.getInt(0));
            rv[pos++] = person + ": " + money;
            cursor.moveToNext();
        }

        cursor.close();

        return rv;
    }

    public Item getMaxSale() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "MAX(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.MAX_SALE,
                        DatabaseHelper.COLUMN_PERSON }, null, null, null, null,
                null);

        cursor.moveToFirst();


        Item rv = cursorToItem(cursor);
        cursor.close();
        return rv;

    }

    public Item getMinSale() {
        Cursor cursor = database.query(DatabaseHelper.TABLE_SALES,
                new String[] { "MIN(" + DatabaseHelper.COLUMN_COST + ") AS " + DatabaseHelper.MIN_SALE,
                        DatabaseHelper.COLUMN_PERSON }, null, null, null, null,
                null);

        cursor.moveToFirst();

        Item rv = cursorToItem(cursor);
        cursor.close();
        return rv;

    }

    private Item cursorToItem(Cursor cursor) {
        Item item = new Item();

        item.setId(cursor.getLong(0));
        item.setPerson(cursor.getString(1));
        item.setAmount(cursor.getInt(2));
        item.setItem(cursor.getString(3));

        return item;
    }
}