首先,请尝试了解我的问题,因为我知道他们有太多与此相关的问题,但在我的情况下没有人工作
为什么我不知道,请看我的代码。
这是有效的
public final class MyScreen extends MainScreen implements FieldChangeListener
{
private combine enter_in;
private manager_s ms , ms_1 ;
private Bitmap img;
LabelField lb_1 , lb_2 , lb_3 ;
public MyScreen()
{
setTitle("MyTitle");
img = Bitmap.getBitmapResource("icon.png");
//Bitmap img_1 = Bitmap.getBitmapResource("icon.png");
enter_in = new combine ( Field.FOCUSABLE , img );
enter_in.setChangeListener(this);
ms = new manager_s( 0 , 4 );
ms.add(enter_in);
lb_1 = new LabelField("Menu") ;
lb_2 = new LabelField("Favorites") ;
lb_3 = new LabelField("Reserved") ;
ms.add(lb_1);
ms.add(lb_2);
ms.add(lb_3);
add(ms);
}
}
但是当我实现FieldChangedListener时,那时ms.delete(lb_1)
无效但delete(ms)
正在运行,请帮助解决此问题
public void fieldChanged(Field field, int context)
{
if ( field == enter_in )
{
ms.delete(lb_1);
}
}
所以,我问的是,有没有理由让ms.delete(lb_1)无法在MyScreen类下工作。
看到这是我的manager_class我正在使用,管理员(custom_manager),这个经理由我的班级扩展,用于添加屏幕内的字段
public class manager_s extends Manager
{
int col ;
int w_1 = 20 ;
protected manager_s(long style , int col )
{
super(style);
this.col = col ;
}
protected void sublayout(int width, int height)
{
for ( int i = 0 ; i < col ; i ++ )
{
Field field = getField (i);
layoutChild( field , 130 , 100 );
}
for ( int i = 0 ; i < col ; i ++ )
{
Field field = getField (i);
setPositionChild ( field , w_1 , 20 );
w_1 = w_1 + 135 ;
setExtent ( width , 200 );
}
}
}
并且错误是 INDEX_OUT_OF_BOUND_EXCEPTION ,这就是我的问题,因为互联网上的每个人(作为资源)都在说删除该字段,但我的情况是没有任何效果。
答案 0 :(得分:0)
试试这个 -
setTitle("MyTitle");
final ButtonField enter_in=new ButtonField("enter_in");
add(enter_in);
lb_1 = new LabelField("Menu") ;
lb_2 = new LabelField("Favorites") ;
lb_3 = new LabelField("Reserved") ;
final HorizontalFieldManager ms=new HorizontalFieldManager();
ms.add(lb_1);
lb_1.setMargin(0,50,0,0);//Here you can set the spacing between the Fields.
ms.add(lb_2);
lb_2.setMargin(0,50,0,0);//Here you can set the spacing between the Fields.
ms.add(lb_3);
add(ms);
FieldChangeListener listener=new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
if(field==enter_in){
ms.delete(lb_1);
ms.invalidate();
}
}
};
enter_in.setChangeListener(listener);
代替我的ButtonField,您可以使用联合收割机。