如何在BlackBerry中单击时在列表字段中显示和隐藏图像
我正在与ListFields合作。我需要自定义列表字段。我有这张照片( ): 我通过如何在BlackBerry中单击时在列表字段中显示和隐藏图像,blackberry,java-me,Blackberry,Java Me,我正在与ListFields合作。我需要自定义列表字段。我有这张照片( ): 我通过CodeModuleManager获得已安装应用程序的列表,现在我想在列表字段中显示,如上图所示。你可以看到黑色的锁图片,我需要定制点击图片 我的意思是,当我点击任何一行时,我想从列表中点击的行中删除黑色的锁定图片,当我再次点击同一行时,我想将锁定图片插入该行 我想我必须调用onclick中的drawListRow()方法还是其他什么?当我点击列表时,黑色的锁定图像应该消失。当我再次点击列表时,它会再次出现 以
CodeModuleManager
获得已安装应用程序的列表,现在我想在列表字段中显示,如上图所示。你可以看到黑色的锁图片,我需要定制点击图片
我的意思是,当我点击任何一行时,我想从列表中点击的行中删除黑色的锁定图片,当我再次点击同一行时,我想将锁定图片插入该行
我想我必须调用onclick中的
drawListRow()
方法还是其他什么?当我点击列表时,黑色的锁定图像应该消失。当我再次点击列表时,它会再次出现
以下是我使用的屏幕代码:
public final class MyScreen扩展主屏幕{
CustomListField myListView;
公共MyScreen(){
位图listThumb=Bitmap.getBitmapResource(“icon.png”);
字符串listTitle=“Headline”;
String listDesc=“移动新闻提要”;
字符串listDesc2=“”;
最终位图navBar=Bitmap.getBitmapResource(“lock.png”);
向量v=新向量();
对于(int i=0;i,遵循您的代码有点困难,因为您的变量命名不正确(例如,navBar
使用的lock.png)。请在将来尝试清理一下这一点……这样您可以得到更好的答案
从您的代码中,我可以看到锁图像是在drawListRow()
中使用以下代码绘制的:
final int navBarPosY = y+(_MAX_ROW_HEIGHT/2 - nevBar.getHeight()/2);
final int navBarPosX = Graphics.getScreenWidth()- nevBar.getWidth()+ margin;
graphics.drawBitmap(navBarPosX-10, navBarPosY, nevBar.getWidth(), nevBar.getHeight(), nevBar, 0 , 0);
因此,您只需跟踪每一行的布尔值,drawListRow()
可以检查以决定是否应绘制锁。向ListRander
添加一个新的锁定属性,该属性表示一行:
public class ListRander {
private boolean locked = true; // defaults to "locked"
public boolean isLocked() {
return locked;
}
public void setLocked(boolean value) {
locked = value;
}
然后,将单击处理程序代码更改为:
myListView = new CustomListField(v){
protected boolean navigationClick(int status, int time) {
int index = getSelectedIndex();
ListRander lr = (ListRander) get(this, index);
lr.setLocked(!lr.isLocked());
// force a repaint of this row
invalidate(index);
return true; // event consumed
}
//protected boolean trackwheelClick (int status, int time) {
// keep this commented out, unless trackwheel devices need special logic
//}
};
这需要更改CustomListField#get(ListField,int)
方法,该方法通常会返回一行的完整数据对象:
public Object get(ListField listField, int index) {
return _listData.elementAt(index);
}
最后,更改drawListRow()
以使用此新布尔值:
if (listRander.isLocked()) {
// draw lock button
final int navBarPosY = y+(_MAX_ROW_HEIGHT/2 - nevBar.getHeight()/2);
final int navBarPosX = Display.getWidth() - nevBar.getWidth()+ margin;
graphics.drawBitmap(navBarPosX-10, navBarPosY, nevBar.getWidth(), nevBar.getHeight(), nevBar, 0 , 0);
}
点击列表时,黑色的锁定图像将消失。当我再次单击列表时,它应该再次出现。嗨,我已经按照您的建议更改了代码,但它不工作。当我单击该行以消失锁定图标时,没有发生任何事情。我的要求是当我点击列表中的特定行时,锁定bl中的图像确认应该消失。当我再次单击列表中的同一行时,它应该再次出现。@user12345,对不起,我的代码在navigationClick()
方法中有一个剪切粘贴错误。我已经在上面修复了它。请复制新的navigationClick()
编码并重试。我确实在我的应用程序中测试了这段代码,效果很好。但是,我不得不将小片段粘贴到我的答案中,我错过了一段:(