Java 如何在点击按钮时刷新BlackBerry ui页面?
我可能看起来很无知,但对于如何解决开发黑莓应用程序的问题,我还没有找到太多信息 基本上,我构建了一个包含几个图像按钮的UI。我想做的是,当我点击其中一个按钮时,我希望屏幕中央的一个图像可以毫无表情地切换到另一个图像 我目前没有使用任何线程,虽然从我收集的我需要 或者我只需要在button listener中按下一个新屏幕,调用类的构造函数并用不同的图像重建页面 抱歉,如果这是不清楚的,我真的会很感激一些基本信息如何做到这一点,或一个链接,解释页面刷新黑莓的细节 非常感谢 编辑:好的,这是我代码的一小部分: 这基本上是我在听众中尝试过的最后一件事,当我按下两个按钮中的一个时,我不知道如何更改图像(flagField)!唯一对我有用的是推屏(新CSP(“americanflag”);每次我都会按下一个按钮,但性能很差,留下一堆屏幕,不理想 我已经试了一整天了呵呵。。。唉,这里说:Java 如何在点击按钮时刷新BlackBerry ui页面?,java,blackberry,page-refresh,Java,Blackberry,Page Refresh,我可能看起来很无知,但对于如何解决开发黑莓应用程序的问题,我还没有找到太多信息 基本上,我构建了一个包含几个图像按钮的UI。我想做的是,当我点击其中一个按钮时,我希望屏幕中央的一个图像可以毫无表情地切换到另一个图像 我目前没有使用任何线程,虽然从我收集的我需要 或者我只需要在button listener中按下一个新屏幕,调用类的构造函数并用不同的图像重建页面 抱歉,如果这是不清楚的,我真的会很感激一些基本信息如何做到这一点,或一个链接,解释页面刷新黑莓的细节 非常感谢 编辑:好的,这是我代码的
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();
}
}
}
在
位图字段中有一个名为setBitmap()
的方法
在侦听器中,您只需调用flagField.setBitmap(newbitmap)
。也可以使用方法setImage()
。无需调用invalidate()
、updateUI等
如果您在使用此方法时遇到任何IllegalStateException
,只需锁定Applicaton事件锁对象或此代码即可。感谢您的响应,我添加了部分代码,可以更清楚地说明我的问题!也许是我,但是有太多的方法调用,我不知道它们会做什么来说明什么可能是错误的。尝试这种方法没有运气:(仍然不会改变图像。事实上,我的听众有问题。这很有效!非常感谢!这很有效,但是重新填充所有内容需要一段时间,因此有延迟。顶部的解决方案效果更好,不过感谢您的回答!
deleteAll();
createGUI();
invalidate();