Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在点击按钮时刷新BlackBerry ui页面?_Java_Blackberry_Page Refresh - Fatal编程技术网

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

Java 如何在点击按钮时刷新BlackBerry ui页面?,java,blackberry,page-refresh,Java,Blackberry,Page Refresh,我可能看起来很无知,但对于如何解决开发黑莓应用程序的问题,我还没有找到太多信息 基本上,我构建了一个包含几个图像按钮的UI。我想做的是,当我点击其中一个按钮时,我希望屏幕中央的一个图像可以毫无表情地切换到另一个图像 我目前没有使用任何线程,虽然从我收集的我需要 或者我只需要在button listener中按下一个新屏幕,调用类的构造函数并用不同的图像重建页面 抱歉,如果这是不清楚的,我真的会很感激一些基本信息如何做到这一点,或一个链接,解释页面刷新黑莓的细节 非常感谢 编辑:好的,这是我代码的

我可能看起来很无知,但对于如何解决开发黑莓应用程序的问题,我还没有找到太多信息

基本上,我构建了一个包含几个图像按钮的UI。我想做的是,当我点击其中一个按钮时,我希望屏幕中央的一个图像可以毫无表情地切换到另一个图像

我目前没有使用任何线程,虽然从我收集的我需要

或者我只需要在button listener中按下一个新屏幕,调用类的构造函数并用不同的图像重建页面

抱歉,如果这是不清楚的,我真的会很感激一些基本信息如何做到这一点,或一个链接,解释页面刷新黑莓的细节

非常感谢

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

这基本上是我在听众中尝试过的最后一件事,当我按下两个按钮中的一个时,我不知道如何更改图像(flagField)!唯一对我有用的是推屏(新CSP(“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();

    }

SetCurrentFlagerSource方法将flagField属性设置为相应的BitmapField

,如果您从某个可能被阻止的位置(如web服务器)获取图像,则只需要使用线程。您应该只需要更新图像,尽管您可能需要在按钮或屏幕上调用invalidate()。真正有帮助的是关于你正在做什么的一些信息。你甚至没有告诉我们你使用什么类来显示图像,如果你扩展了它或没有,等等。

我不知道你在代码中做什么;但是刷新屏幕的方式不是这样的

因此,我更改您试图刷新屏幕的csp屏幕;请参阅下面的代码

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();   
    }
}
}
  • 构造一个createGUI()方法,在该方法中编写您必须为该屏幕设计的代码。不仅是这个屏幕;你所创造的一切都是这样的; 及
  • 要刷新屏幕,请执行上述三行操作删除所有字段,然后再次调用createGUI()方法;最后,invalidate()

  • 位图字段中有一个名为
    setBitmap()
    的方法

    在侦听器中,您只需调用
    flagField.setBitmap(newbitmap)
    。也可以使用方法
    setImage()
    。无需调用
    invalidate()
    、updateUI等


    如果您在使用此方法时遇到任何
    IllegalStateException
    ,只需锁定Applicaton事件锁对象或此代码即可。

    感谢您的响应,我添加了部分代码,可以更清楚地说明我的问题!也许是我,但是有太多的方法调用,我不知道它们会做什么来说明什么可能是错误的。尝试这种方法没有运气:(仍然不会改变图像。事实上,我的听众有问题。这很有效!非常感谢!这很有效,但是重新填充所有内容需要一段时间,因此有延迟。顶部的解决方案效果更好,不过感谢您的回答!
    deleteAll();
    createGUI();
    invalidate();