Richard,

To keep it simple, I would recommend:

1. Override bindChildView and set your floating point value "manually". You can get the value from the cursor, call findViewById() on the view that's passed it to get the TextView that should show the value, format the value as a string, and then call amountTextTiew.setText(formattedAmountValueString);

2. Call the base class bindChildView from your own to take care of all the other data items / views except the floating point one.

3. Pass from/to arrays to SimpleCursorTreeAdapter that have all data item / view IDs - except the floating point amount data item, which is handled by pt. 1.

With this, you won't need to do too much work in your overrides, won't need to copy and modify any code from Android, won't need access to private data members of SimpleCursorTreeAdapter, and won't need to rely on ViewBinder that only appeared in API level 5:

http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.ViewBinder.html

-- Kostya

PS - I find it very useful to have Android framework source code in Eclipse. Instead of hunting through the source code repository, it lets me open source code by class name, by pressing Ctrl+Shift+T.

11.02.2011 12:38, Richard Marsh пишет:
Kostya,

Thank you SO much for taking the time to reply. I guess the next rookie question would be: "Do I get the source code for the SimpleCursorTreeAdapter and modify it to build my own"

I was playing around with that idea and when I tried to overwrite the method below, my custom adapter didn't recognize the variables mChildFrom and mChildTo. I assumed that with apis after level 4 had changed the parent classes that define and assign those arrays.

@Override
protected void bindChildView(View view, Context context, Cursor cursor, boolean isLastChild) {
bindView(view, context, cursor, mChildFrom, mChildTo);
}

I'm ok with the idea of building my own adapter from the "base" adapters. I'm just not sure how to access the source code, what is derived from the parent classes etc. I'm sorry if these questions seems stupid, but I've only been at this for about a month.

Alos, if I look at the documentation here http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html and filter it on API level 4, I don't see a bindView method. Is the method inherited?

One last question, to be clear on your suggestion, is that I override the bindChildView and bindGroupView methods?

Again, thank you for replying.

On Fri, Feb 11, 2011 at 11:26 AM, Kostya Vasilyev <[email protected] <mailto:[email protected]>> wrote:

    Richard,

    Adapter view binders are only a convenience feature, and you can
    always skip to the real stuff.

    SimpleCursorTreeAdapter has this private method where mViewBinder
    is used:

    private void bindView(View view, Context context, Cursor cursor,
    int[] from, int[] to) {
    ViewBinder binder = mViewBinder;
    for (int i = 0; i < to.length; i++) {
    if (binder != null) {
    bound = binder.setViewValue(v, cursor, from[i]);
    }
    ... default case for when there is no binder ...
    }
    }

    This method is called from public, API level 1, override-able SDK
    methods:

    @Override
    protected void bindChildView(View view, Context context, Cursor
    cursor, boolean isLastChild) {
    bindView(view, context, cursor, mChildFrom, mChildTo);
    }

    @Override
    protected void bindGroupView(View view, Context context, Cursor
    cursor, boolean isExpanded) {
    bindView(view, context, cursor, mGroupFrom, mGroupTo);
    }

    So - override bindChildView / bindGroupView to format and set the
    values any way you like. You can even make your own MyBinder class
    and follow the general structure as above.

    Also, if you're not using automatic view binding, your might as
    well derive your adapter from ResourceCursorTreeAdapter.

    In general, my impression of Simple*Adapter classes is that they
    are like bicycles for small children (those with little wheels on
    the sides) - not a bad way to start, but you outgrow them pretty
    quickly.

    -- Kostya

    11.02.2011 11:41, Richard Marsh пишет:

        Hi everyone

        I've been stuck on this issue for a couple of days now and I
        think I'm close to murder, so any help would be greatly
        appreciated.

        First just a little context.

        I have a db with a Budget and Category tables. The fields are
        _id ,CategoryID, Item and Amount. The amount is stored as a
        double. I've written my own db adapters and they are working
        no problem. So with lots of reading and searching I finally
        get my ExpandablListView to populate using my slightly
        modified SimpleCursorTreeAdapter. My custom adapter just
        changes the GetChildrenCursor to return the children
        associated with each category.

        Now here's the problem:

        The amount value is shown in the list and I would like to
        format how the value is displayed into a local currency. The
        formatting isn't the issue. The issue is that I can use a
        ViewBinder but only if I use API level 5 and up. But I want to
        use API level 4 and up.

        So how do I change the way the data is displayed in my list
        items, without having to use a viewbinder... or at least,
        working withing the API 4 framework.

        ANY advice or ideas would be appreciated!

        Kind regards --
        You received this message because you are subscribed to the Google
        Groups "Android Developers" group.
        To post to this group, send email to
        [email protected]
        <mailto:[email protected]>
        To unsubscribe from this group, send email to
        [email protected]
        <mailto:android-developers%[email protected]>
        For more options, visit this group at
        http://groups.google.com/group/android-developers?hl=en



-- Kostya Vasilyev -- WiFi Manager + pretty widget --
    http://kmansoft.wordpress.com


-- You received this message because you are subscribed to the Google
    Groups "Android Developers" group.
    To post to this group, send email to
    [email protected]
    <mailto:[email protected]>
    To unsubscribe from this group, send email to
    [email protected]
    <mailto:android-developers%[email protected]>
    For more options, visit this group at
    http://groups.google.com/group/android-developers?hl=en


--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


--
Kostya Vasilyev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to