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
如何在BlackBerry中单击时在列表字段中显示和隐藏图像_Blackberry_Java Me - Fatal编程技术网

如何在BlackBerry中单击时在列表字段中显示和隐藏图像

如何在BlackBerry中单击时在列表字段中显示和隐藏图像,blackberry,java-me,Blackberry,Java Me,我正在与ListFields合作。我需要自定义列表字段。我有这张照片( ): 我通过CodeModuleManager获得已安装应用程序的列表,现在我想在列表字段中显示,如上图所示。你可以看到黑色的锁图片,我需要定制点击图片 我的意思是,当我点击任何一行时,我想从列表中点击的行中删除黑色的锁定图片,当我再次点击同一行时,我想将锁定图片插入该行 我想我必须调用onclick中的drawListRow()方法还是其他什么?当我点击列表时,黑色的锁定图像应该消失。当我再次点击列表时,它会再次出现 以

我正在与ListFields合作。我需要自定义列表字段。我有这张照片( ):

我通过
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()
编码并重试。我确实在我的应用程序中测试了这段代码,效果很好。但是,我不得不将小片段粘贴到我的答案中,我错过了一段:(