Skip to main content

How to refresh BlackBerry ui page on button click?



I may seem ignorant but I have not found much information about how to go about my problem developing my BlackBerry application.





Basically I have constructed a UI that contains a few image buttons. What I want to do is when I click on one of the buttons, I want an image at the center of the screen to switch seemlessly to another image.





I am currently not using any threads though from what I've gathered I need to?





Or do I simply have to push a new screen in my button listener and recall the class's constructor and rebuild the page with different images?





Sorry if this is unclear, I would really appreciate some basic info on how to do this or a link that explains page refreshing in detail for blackberry!





Thanks alot





EDIT : Okay here is a very small part of my code :





This is basically the last thing I have tried in the listeners, I dont know how to change the image (flagField) when I press one of the two buttons! The only thing that worked for me was pushScreen(new Csps("americanflag")); every time I would press on a button, but the performance was bad and I was left with a stack of screens, not ideal.





I have been trying to do this all day long hehe... sigh , here goes:







public class CSP extends UiApplication

{

public static void main(String[] args)

{

CSP theApp = new CSP();

theApp.enterEventDispatcher();

}



public CSP()

{

CSPS csps = new CSPS();

pushScreen(csps);

}

}



class CSPS extends MainScreen implements FieldChangeListener

{



int width = Display.getWidth();

int height = Display.getHeight();



ButtonField backButton;



ImageButtonField canadianFlag;

ImageButtonField americanFlag;

Bitmap changeableFlag;

String currentFlag ="canada_flag.png";

BitmapField flagField;



canadianFlag = construct("canada_flag.png", 0.18);

americanFlag = construct("us.gif", 0.18);



canadianFlag.setChangeListener(this);

americanFlag.setChangeListener(this);



add(flagField);

add(canadianFlag);

add(americanFlag);

//LISTENERS

public void fieldChanged(Field field, int context){





if(field == canadianFlag){

setCurrentFlagResource("canada_flag.png");

BitmapField newFlagField = populateFlagField(currentFlag, 0.3);

replace(flagField, newFlagField);



this.invalidate();

this.doPaint();

this.updateDisplay();



}

else if(field == americanFlag){



setCurrentFlagResource("american-flag.gif");

BitmapField newFlagField = populateFlagField(currentFlag, 0.3);

replace(flagField, newFlagField);



this.invalidate();

this.doPaint();

this.updateDisplay();



}







the setCurrentFlagRessource method sets the flagField attribute to the appropriate BitmapField


Comments

  1. There is a method called setBitmap() in the BitmapField.

    In the listeners you should simply call flagField.setBitmap(newbitmap). You can also use the method setImage(). There is no need to call invalidate, updateUI etc.

    If you get any IllegalStateException while using this method, simply get a lock on the Applicaton Event lock object or invokeLater() this code.

    ReplyDelete
  2. You will only need to use threads if you are getting your images from some place that might block (like a web server). You should only need to update the images, though you may need to call invalidate() on your button or screen. What would really help is some information on what you are doing. You didn't even tell us what class you're using to display the image, if you've extended it or not, etc.

    ReplyDelete
  3. I don't know what you are doing in your code; But The way of refresh the screen is not like that;

    So, I change Your CSPS screen which you are trying to refresh the screen; See the below code...

    class CSPS extends MainScreen implements FieldChangeListener
    {

    int width = Display.getWidth();
    int height = Display.getHeight();

    ButtonField backButton;

    //ImageButtonField canadianFlag;
    //ImageButtonField americanFlag;
    Bitmap changeableFlag;
    String currentFlag ="canada_flag.png";
    BitmapField flagField;
    public CSPS()
    {
    createGUI();
    }

    public void createGUI()
    {
    canadianFlag = construct("canada_flag.png", 0.18);
    americanFlag = construct("us.gif", 0.18);

    canadianFlag.setChangeListener(this);
    americanFlag.setChangeListener(this);

    add(flagField);
    add(canadianFlag);
    add(americanFlag);
    //LISTENERS
    }

    public void fieldChanged(Field field, int context){


    if(field == canadianFlag)
    {
    setCurrentFlagResource("canada_flag.png");
    BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
    replace(flagField, newFlagField);

    deleteAll();
    createGUI();
    invalidate();
    }
    else if(field == americanFlag)
    {
    setCurrentFlagResource("american-flag.gif");
    BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
    replace(flagField, newFlagField);

    deleteAll();
    createGUI();
    invalidate();
    }
    }
    }




    Construct a createGUI() method, in that write the code that what you have to design for that screen. Not only this screen; What ever you are creating do like this;
    and



    deleteAll();
    createGUI();
    invalidate();




    For refresh the screen do the above three lines; delete all the fields and call again the createGUI() method; and at last invalidate();

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.