1

我正在尝试在VerticalFieldManager中添加一个列表,然后将该经理添加到另一个VerticalFieldManager中。我在自定义选项卡中使用它。第一次应用程序启动时它运行良好,但是当我切换到另一个选项卡并返回相同的选项卡时,它会给出IllegalStateException

我以多种方式尝试了它,但没有得到导致添加该 VerticalFieldManager 异常的原因。

我正在使用代码:

//HEADER
_bitmap = EncodedImage.getEncodedImageResource("Friends.png");
friendsBmp = new BitmapField(Constants.sizePic(_bitmap, _bitmap.getHeight(), _bitmap.getWidth()));

//add(WebBitmapField.getUrlHFM());
SCREEN_FLAG = Constants.FRIENDS_FLAG ;

//FRIENDS' UPPER TAB    
friendsTabHFM =new HorizontalFieldManager();

Bitmap ConnectedUser_normal_Bmp =Constants.sizePic(EncodedImage.
        getEncodedImageResource("connected_user_normal.png"),40, Display.getWidth()/2); //Bitmap.getBitmapResource("connected_user_normal.png");
Bitmap search_normal_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("search_normal.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_normal.png");

Bitmap ConnectedUser_tap_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("connected_user_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("connected_user_tap.png");
Bitmap search_tap_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("search_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_tap.png");

connectedUsersTab= new CustomButtonField(ConnectedUser_normal_Bmp.getWidth(), "", ConnectedUser_normal_Bmp, ConnectedUser_tap_Bmp, ButtonField.FIELD_HCENTER );
connectedUsersTab.setChangeListener(this);

searchTab = new CustomButtonField(search_normal_Bmp.getWidth(), "", search_normal_Bmp, search_tap_Bmp, ButtonField.FIELD_RIGHT);
searchTab.setChangeListener(this);


friendsTabHFM.add(connectedUsersTab);
friendsTabHFM.add(searchTab);

if(Constants.isGetConnectedFriends){
    Constants.isGetConnectedFriends =false ;
    if(friendsVFM.getFieldCount()!= 0){
        friendsVFM.deleteAll();
    }
    //GET CONNECTED FRIENDS WEB SERVICE CALL
    GetConnectedFriendsInterMediater getConnectedFriendsInterMediater = new GetConnectedFriendsInterMediater(WebServiceDetails.METHOD_GET_CONNECTED_USER, Jxa.loginUserName);
    PleaseWaitPopupScreen.showScreenAndWait(getConnectedFriendsInterMediater, Constants.PLEASE_WAIT_TEXT);

}else if(Constants.isGetUserByUsername){
    //Constants.isGetUserByUsername = false ;

    GetUserByUsernameIntermediator getUserListIntermediator=new GetUserByUsernameIntermediator(Jxa.loginUserName ,SearchUserScreen.userName);
    PleaseWaitPopupScreen.showScreenAndWait(getUserListIntermediator, Constants.PLEASE_WAIT_TEXT);

}else if(Constants.isGetAllUser){
    Constants.isGetAllUser = false ;

    GetAllUserListIntermediator getAllUserListIntermediator=new GetAllUserListIntermediator(WebServiceDetails.METHOD_FIND_USERS,SearchUserScreen._ageRange,SearchUserScreen._status,SearchUserScreen._religion,String.valueOf(SearchUserScreen._page) ,Jxa.loginUserName);
    PleaseWaitPopupScreen.showScreenAndWait(getAllUserListIntermediator, Constants.PLEASE_WAIT_TEXT);
}


if(_mainScreenVFM.getFieldCount()!=0){
    _mainScreenVFM.deleteAll();
}
_mainScreenVFM.add(friendsTabHFM);
_mainScreenVFM.add(friendsVFM);

这些代码用于其中有两个子选项卡的选项卡。对于子选项卡,它运行良好,但不适用于主选项卡。

还有另一种情况,当调用GetConnectedFriendsInterMediater时,我在FriendsVFM中添加列表,这会创建异常。代码是:

GetConnectedFriendsWebService getFriendsWebService = new GetConnectedFriendsWebService(method ,userName);
    Vector friendsVecList= getFriendsWebService.getFriends();

Constants.connectedUsersVector = friendsVecList ;

synchronized (UiApplication.getEventLock()) {
    if(TabControlScreen.friendsVFM.getFieldCount()!=0){
        TabControlScreen.friendsVFM.deleteAll();
    }
    TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList)); //HERE LIST IS ADDED
}

我已经解决了这个问题,当我切换选项卡时,我没有为friendsVFM创建新实例并使用当时导致异常的相同实例。现在,当我尝试在_listVFM中添加buddyList时引发相同的异常. 我知道这是由于再次添加了已添加的buddyList。是否有任何解决方案以便我可以毫无例外地添加列表。代码:

//创建好友列表屏幕的单例引用

public static ConnectedFriends getInstance(BuddyListField buddyListField){
        if(connectedFriends==null){
            connectedFriends = new ConnectedFriends(buddyListField);
        }
        return connectedFriends;
    }

public ConnectedFriends(BuddyListField buddyListField) {
        if(_listVFM!=null){
            _listVFM.deleteAll();
        }
        _listVFM = new VerticalFieldManager();

        _listVFM.add(buddyListField);//HERE IS EXCEPTION ,BUT WANT TO ADD THE LIST //SECOND TIME TOO
}

当我从另一个选项卡返回到 sam 选项卡时,它会引发异常,或者换句话说,我无法添加列表。

4

2 回答 2

1

当您尝试按照 Signare 的建议两次添加字段时,会发生非法状态异常。我想你应该先试试这个: friendsVFM.getManager().delete(friendsVFM);

于 2013-06-04T11:23:38.710 回答
0

我通过在 buddyList 上使用 getManager() 并删除它来解决它。然后我再次根据要求添加它并且它有效。代码:

if(ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager()!= null){
            ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager().delete(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));
            }
            TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));

此代码在第二部分代码中调用GetConnectedFriendsWebService时使用。

于 2013-06-05T09:06:02.270 回答