在Android中使用switch-case和if-else for radioGroup时有什么不同?

时间:2016-10-13 05:09:27

标签: android listview android-service android-arrayadapter

现在我使用switch-case

func uploadScans(parameters: [String: AnyObject], completionHandler: (AnyObject?, NSError?) -> ()) {
    makePostCall(CommonFunctions().getSaveSKUDataUrl(), parameters: parameters,completionHandler: completionHandler)
}

func makePostCall(url: String, parameters: [String: AnyObject], completionHandler: (AnyObject?, NSError?) -> ()) {
    Alamofire.request(.POST, url, parameters: parameters)
        .responseJSON { response in
            switch response.result {
                case .Success(let value):
                    completionHandler(value, nil)
                case .Failure(let error):
                    completionHandler(nil, error)
            }
    }
}

uploadScans(params) { responseObject, error in
    let json = JSON(responseObject!)
}

有时我会点击第一个单选按钮,我也会立即点击第二个单选按钮。

在case块中,我将intent传递给Service类,该类与Web服务对话并为ListView更新arrayAdapter。

由于我快速单击两个单选按钮,因此UI会获得两种语言的结果(案例块)。 1)如何避免这种情况? 2)在这些问题中使用switch case代替if-else是否很重要?

4 个答案:

答案 0 :(得分:1)

收到onCheckedChanged事件后,禁用单选按钮

答案 1 :(得分:1)

这完全取决于您的UI。在" onCheckedChanged"之后禁用单选按钮。叫也不正确。因为在选择一种语言后,用户可能想要更改选择,因此您应该在UI中提供确认组件。

如果我们为您的方案使用switch case或if-else,这里有什么区别。

答案 2 :(得分:0)

我可能误解了你在做什么,但假设你正在启动并展示当前的活动,你可以在开始新活动后致电finish()

否则,您可以声明boolean字段shouldHandleCheckChanged或其他内容,以跟踪是否处理onCheckChanged()中的任何案例。您可以在开始新活动后立即将值设置为false,然后在收到您期望的任何更新后将其设置为true。

答案 3 :(得分:0)

你可以做这样的事情,在你的活动类中创建一个布尔字段:

Private isLoadingNewActivity = false;

在你的onResume中将其设为false:

isLoadingNewActivity = false;

在你的听众中检查它:

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            If(isLoadingNewActivity)
            return;
            switch(checkedId){
                case R.id.Eng:
                    // do operations specific to this selection
                    setLocale("en_US");
                    Intent intentEng = new Intent(getActivity(), Some.class);
                    startActivity(intentEng);
                    isLoadingNewActivity = true; 
                    break;

                case R.id.French:
                    // do operations specific to this selection
                    setLocale("fr");
                    Intent intent = new Intent(getActivity(), Some.class);
                    startActivity(intent);
                    isLoadingNewActivity = true;
                    break;
            }
        }
    });