首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有不可聚焦和可复选ObjectListField的复选框?

带有不可聚焦和可复选ObjectListField的复选框?
EN

Stack Overflow用户
提问于 2013-03-16 14:03:06
回答 1查看 170关注 0票数 0

我正在尝试创建一个复选框,下面的对象列表就在那里。我试图关注checkbox,但它既不是可聚焦的,也不是可检查的,.The焦点位于下面列表的第一个元素上。

如何将复选框作为焦点并使其可复选?在这里,checkbox位于我要添加列表的VerticalFieldManager中。

这里我要添加两个东西:一个是水平场管理器(OnlineCheckBoxHfm),另一个是objectListField(buddyList)。

现在的问题是,默认的焦点在列表的第一个元素上,而我无法将焦点放在我放入CheckBox的HorizontalFieldManager上。由于focus在HorizontalFieldManager上不可用,所以我无法检查CheckBox。

代码语言:javascript
复制
public class BuddyMenuItem extends VerticalFieldManager implements FieldChangeListener{   

 public BuddyMenuItem(BuddyListField buddyList) {

        _bitmap = EncodedImage.
        getEncodedImageResource("buddies_header.png");
        mainMenuBmp = new BitmapField(Constant.sizePic(_bitmap, _bitmap.getHeight(), Display.getWidth()));

        HorizontalFieldManager onlineCheckBoxHfm=new HorizontalFieldManager(HorizontalFieldManager.USE_ALL_WIDTH);
        _onlineCheckBox=new CheckboxField("Online",false,CheckboxField.FIELD_LEFT|CheckboxField.FOCUSABLE);
        _onlineCheckBox.setChangeListener(this);

        onlineCheckBoxHfm.add(_onlineCheckBox);
        onlineCheckBoxHfm.add(new NullField(NullField.FOCUSABLE));
//      add(mainMenuBmp);
        add(onlineCheckBoxHfm);
        add(buddyList);
    }

BuddyListField类如下:

代码语言:javascript
复制
import java.util.Vector;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Keypad;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.Touchscreen;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ObjectListField;

import com.np.naijapings.Buddy;
import com.np.naijapings.NaijapingsMain;

public class BuddyListField extends ObjectListField {
    public static final Bitmap offlineIcon = Bitmap.getBitmapResource("offline.png");
    public static final Bitmap awayIcon = Bitmap.getBitmapResource("away.png");
    public static final Bitmap busyIcon = Bitmap.getBitmapResource("busy.png");
    public static final Bitmap onlineIcon = Bitmap.getBitmapResource("online.png");
    public static final Bitmap unreadIcon = Bitmap.getBitmapResource("unread.png");
    public static final Bitmap maleIcon=Bitmap.getBitmapResource("male.png");

    public static final Bitmap[] statusIcon = new Bitmap[]{offlineIcon, awayIcon, busyIcon, onlineIcon};

    public static Vector buddyVector;
    public static int onlineBuddyCount=0;
    private final NPingsMain nPings;
    public static boolean showOnlineBuddy=false;

    private Bitmap _chatBmp=Bitmap.getBitmapResource("chat.png");

    public BuddyListField(NPingsMain n,boolean showOnlineBuddy) {
        nPings = n;
        buddyVector = new Vector();
        this.showOnlineBuddy=showOnlineBuddy;
    }

    public Buddy getBuddyAt(int index) {
        return (Buddy)buddyVector.elementAt(index);     
    }

    protected boolean keyChar(char key, int status, int time) {
        int idx;
        switch(key) {
        case Keypad.KEY_ENTER:
            idx = this.getSelectedIndex();
            if (idx >= 0) {
                NPingsMain.currentBuddy = (Buddy)buddyVector.elementAt(idx);
                NPingsMain.openBuddy(NPingsMain.currentBuddy);
            }
            return true;

        case 'e':
            idx = this.getSelectedIndex()-1;
            if (idx >= 0) {
                this.setSelectedIndex(idx);
            }
            return true;

        case 's':
            return true;

        case 'f':
            return true;

        case 'x':
            idx = this.getSelectedIndex()+1;
            if (idx > 0 && idx < this.getSize()) {
                this.setSelectedIndex(idx);
            }
            return true;

        case 't':
            if (this.getSize() > 0) {
                this.setSelectedIndex(0);
            }
            return true;
        }

        return false;
    }
    protected boolean navigationClick(int status, int time) {
        int idx = this.getSelectedIndex();
        if(Touchscreen.isSupported()){
            if (idx >= 0) {
                nPings.currentBuddy = (Buddy)buddyVector.elementAt(idx);
                if((nPings.currentBuddy.status==0x00000003)||(nPings.currentBuddy.status==0x00000002)||(nPings.currentBuddy.status==0x00000001)){
                    NPingsMain.openBuddy(nPings.currentBuddy);
                }
            }
            return false;
        }else{

            if (idx >= 0) {
                nPings.currentBuddy = (Buddy)buddyVector.elementAt(idx);
                if((nPings.currentBuddy.status==0x00000003)||(nPings.currentBuddy.status==0x00000002)||(nPings.currentBuddy.status==0x00000001)){
                    NPingsMain.openBuddy(nPings.currentBuddy);
                }
            }
            return false;
        }
    }
    protected boolean touchEvent(TouchEvent message) {
        //if(message.getEvent()==TouchEvent.CLICK){
            int idx;
            switch(TouchEvent.CLICK) {
            case TouchEvent.CLICK:
                idx = this.getSelectedIndex();
                if (idx >= 0) {
                    nPings.currentBuddy = (Buddy)buddyVector.elementAt(idx);
                    if((nPings.currentBuddy.status==0x00000003)||(nPings.currentBuddy.status==0x00000002)||(nPings.currentBuddy.status==0x00000001)){
                        NPingsMain.openBuddy(nPings.currentBuddy);
                    }
                }
                return true;

            case 'e':
                idx = this.getSelectedIndex()-1;
                if (idx >= 0) {
                    this.setSelectedIndex(idx);
                }
                return true;

            case 's':
                return true;

            case 'f':
                return true;

            case 'x':
                idx = this.getSelectedIndex()+1;
                if (idx > 0 && idx < this.getSize()) {
                    this.setSelectedIndex(idx);
                }
                return true;

            case 't':
                if (this.getSize() > 0) {
                    this.setSelectedIndex(0);
                }
                return true;
            }

        //  return false;

    //  }
        return super.touchEvent(message);
    }

    public void buddyReposition(Buddy b) {
        int index = buddyVector.indexOf(b);
        buddyReposition(index);
    }

    public void buddyReposition(int oldIndex) {
        Buddy b = (Buddy)buddyVector.elementAt(oldIndex);
        int newIndex = 0;

        if (b.unread) {
            newIndex = 0;
        } else {
            while (newIndex < buddyVector.size() &&
                    ((b == (Buddy)buddyVector.elementAt(newIndex)) || 
                            ((Buddy)buddyVector.elementAt(newIndex)).unread || 
                            (b.status < ((Buddy)buddyVector.elementAt(newIndex)).status)))
                ++newIndex;
        }

        newIndex = (oldIndex < newIndex) ? (newIndex-1) : newIndex;

        if (oldIndex != newIndex) {
            buddyVector.removeElementAt(oldIndex);
            buddyVector.insertElementAt(b, newIndex);
        }

        this.invalidate();
    }

    public int findBuddyIndex(String jid) {
        for (int i = buddyVector.size()-1; i >= 0; i--) {
            if (((Buddy)buddyVector.elementAt(i)).jid.equals(jid))
                return i;
        }

        return -1;
    }

    public Buddy findBuddy(String jid) {
        for (int i = buddyVector.size()-1; i >= 0; i--) {
            if (((Buddy)buddyVector.elementAt(i)).jid.equals(jid))
                return (Buddy)buddyVector.elementAt(i);
        }
        return null;
    }

    public void addBuddy(Buddy b) {
        //CHECK FOR ONLINE BUDDIES  
        buddyVector.addElement(b);
        this.insert(buddyVector.indexOf(b));

    }

    public void deleteBuddy(int index){
        buddyVector.removeElementAt(index);
        this.delete(index);

    }

    public void drawListRow(ListField listField, Graphics graphics, int index, int y, int width) {
        // NOTICE 14 would be consist the icon size

        onlineBuddyCount=0; 
        String bName="";
        Buddy b = (Buddy)buddyVector.elementAt(index);
        if(showOnlineBuddy==true){
            if(b.status==0x00000003||b.status==0x00000002||b.status==0x00000001){

                //DRAW ROW BACKGROUND START
                if (listField.getSelectedIndex() != index) {
                    graphics.setBackgroundColor(index % 2 == 0 ? Color.WHITE
                            : Color.LIGHTGRAY);
                    graphics.clear();
                    listField.setFocus();
                }
                //DRAW ROW BACKGROUND END

                onlineBuddyCount++;
                if(b.name.endsWith("net")){
                    int i=b.name.indexOf("@");
                    bName=b.name.substring(0, i);
                }else{
                    bName=b.name;
                }
                if (b.unread) {
                    graphics.drawBitmap(0, y+3, unreadIcon.getWidth(), unreadIcon.getHeight(),unreadIcon , 0, 0);
                } else {
                    graphics.drawBitmap(0, y+3, unreadIcon.getWidth(), unreadIcon.getHeight(),statusIcon[b.status] , 0, 0);
                }

                graphics.drawText(bName, 25, y, DrawStyle.HDEFAULT, width-12);
                graphics.drawBitmap(Display.getWidth()-_chatBmp.getWidth(), y-6, _chatBmp.getWidth(), _chatBmp.getHeight(), _chatBmp, 0, 0);
            }
        }else{
            //DRAW ROW BACKGROUND START
            if (listField.getSelectedIndex() != index) {
                graphics.setBackgroundColor(index % 2 == 0 ? Color.WHITE
                        : Color.LIGHTGRAY);
                graphics.clear();
                listField.setFocus();
            }
            //DRAW ROW BACKGROUND END

            onlineBuddyCount++;
            if(b.name.endsWith("net")){
                int i=b.name.indexOf("@");
                bName=b.name.substring(0, i);
            }else{
                bName=b.name;
            }
            if (b.unread) {
                graphics.drawBitmap(0, y+3, unreadIcon.getWidth(), unreadIcon.getHeight(),unreadIcon , 0, 0);
            } else {
                graphics.drawBitmap(0, y+3, unreadIcon.getWidth(), unreadIcon.getHeight(),statusIcon[b.status] , 0, 0);
            }

            graphics.drawText(bName, 25, y, DrawStyle.HDEFAULT, width-12);
            graphics.drawBitmap(Display.getWidth()-_chatBmp.getWidth(), y-6, _chatBmp.getWidth(), _chatBmp.getHeight(), _chatBmp, 0, 0);
        }
    }



    public void clearBuddies() {
        if (nPings.buddyList != null) {
            int i = buddyVector.size();
            while (i-- > 0)
                this.delete(0);
            nPings.buddyscreen.delete(nPings.buddyList);
            nPings.buddyList = null;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-19 17:36:29

我不能运行你的代码,因为里面有太多我没有的东西(其他类,PNG,等等),但我愿意打赌你的问题在这里:

代码语言:javascript
复制
public void drawListRow(ListField listField, Graphics graphics, int index, int y, int width) {

   // other stuff here

      listField.setFocus();

调用setFocus()将在列表字段( BuddyListField)上设置焦点。所以,你的CheckBoxField 实际上是可聚焦的。问题是您添加了复选框字段,然后添加了listfield。当使用drawListRow()绘制列表域时,您总是将焦点从复选框上移开,并将其放回列表域。

删除对listField.setFocus()的调用...他们有两个人。

drawListRow()是用于绘图的。我不确定我能想出一个原因,为什么那个方法中的任何东西实际上应该改变焦点,这就是setFocus()所做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15446142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档