如何在按钮单击时刷新BlackBerry ui页面?

时间:2012-02-10 16:37:27

标签: java blackberry page-refresh

我可能看起来很无知,但我没有找到有关如何解决我在开发BlackBerry应用程序时出现问题的大量信息。

基本上我构建了一个包含一些图像按钮的UI。我想要做的是当我点击其中一个按钮时,我希望屏幕中央的图像能够无缝切换到另一个图像。

我目前没有使用任何线程,但我收集的是我需要的?

或者我只需要在我的按钮监听器中按下一个新屏幕并调用该类的构造函数并使用不同的图像重建该页面?

很抱歉,如果不清楚,我会非常感谢有关如何执行此操作的一些基本信息或一个解释黑莓详细页面刷新的链接!

非常感谢

编辑:好的,这是我的代码的一小部分:

这基本上是我在听众中尝试的最后一件事,当我按下两个按钮之一时,我不知道如何更改图像(flagField)!唯一对我有用的是pushScreen(新的Csps(“americanflag”));每次我按下一个按钮,但表现都不好,我留下了一堆屏幕,不太理想。

我一整天都在努力这样做......叹息,这里是:

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();

    }

setCurrentFlagRessource方法将flagField属性设置为适当的BitmapField

3 个答案:

答案 0 :(得分:2)

setBitmap()中有一个名为BitmapField的方法。

在听众中,您只需拨打flagField.setBitmap(newbitmap)即可。您还可以使用方法setImage()。无需调用invalidate(),updateUI等。

如果您在使用此方法时获得任何IllegalStateException,只需锁定Applicaton事件锁定对象或invokeLater()此代码。

答案 1 :(得分:1)

如果从某个可能阻止的地方(如网络服务器)获取图像,则只需要使用线程。您应该只需要更新图像,但可能需要在按钮或屏幕上调用invalidate()。真正有用的是关于你正在做什么的一些信息。你甚至没有告诉我们你用什么类来显示图像,如果你已经扩展或不扩展等等。

答案 2 :(得分:0)

我不知道你在代码中做了什么;但刷新屏幕的方式并非如此;

因此,我更改了您尝试刷新屏幕的 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;
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();   
    }
}
}
  
      
  1. 构建一个 createGUI()方法,编写您必须为该屏幕设计的代码。不仅这个屏幕;你创造的是什么样的;   和
  2.   
deleteAll();
createGUI();
invalidate();
  
      
  1. 刷新屏幕做以上三行; 删除所有字段,然后再次调用 createGUI()方法;最后 invalidate();
  2.