J'essaie de créer une case à cocher et en dessous de cette liste d'objets est là. J'essaie de me concentrer sur la case à cocher, mais elle n'est ni focalisable ni vérifiable. L'accent est mis sur le premier élément de la liste ci-dessous.Case à cocher avec un ObjectListField non focalisable et vérifiable?
Comment puis-je activer la case à cocher et la rendre vérifiable? Ici, la case à cocher est dans un VerticalFieldManager dans lequel j'ajoute la liste.
Ici, je suis d'ajouter deux choses: l'une est horizontale Gestionnaire de champs (onlineCheckBoxHfm) et d'autres est objectListField (Buddylist).
Maintenant le problème est, le focus par défaut est sur le premier élément de la liste et je suis incapable de se concentrer sur HorizontalFieldManager dans lequel j'ai placé le CheckBox. Étant donné que le focus n'est pas disponible sur HorizontalFieldManager, je ne peux pas vérifier le CheckBox.
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);
}
classe BuddyListField est la suivante:
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;
}
}
}
Veuillez indiquer le code que vous utilisez pour créer votre CheckBoxField et l'ajouter à un gestionnaire (avec ObjectListField), puis à l'écran. Merci. – Nate
Je ne pense pas que ce soit quelque chose dans le code que vous montrez. Si 'BuddyListField' est juste un' ObjectListField', alors je suis capable de me concentrer et de cocher la case. Peut-être que vous pouvez poster la classe 'BuddyListField', et aussi nous dire quelle classe' BuddyMenuItem' * étend *? – Nate
@Nate: J'ai mis à jour le code, avec la classe BuddyListField. –