Java Android Spinner加载空值(填充数据前显示弹出窗口)

Java Android Spinner加载空值(填充数据前显示弹出窗口),java,android,Java,Android,我正在使用微调器库。 当我第一次单击微调器时,没有适配器连接到它,或者微调器项显示空列表。。 像 但是当我关闭它并再次选择它时。。数据显示出来了,所以我相信。。由于数据获取耗时。。微调器显示空对话框。。现在我需要处理这件事。。如何仅在填充数据或数据可用时显示微调器。。我尝试了异步任务和处理程序,但没有成功。。任何暗示都将不胜感激。。多谢各位 编辑。。。 我已经在spinner onTouch事件上调用api来填充数据 { private void ProvinceSpinnerCode

我正在使用微调器库。 当我第一次单击微调器时,没有适配器连接到它,或者微调器项显示空列表。。 像

但是当我关闭它并再次选择它时。。数据显示出来了,所以我相信。。由于数据获取耗时。。微调器显示空对话框。。现在我需要处理这件事。。如何仅在填充数据或数据可用时显示微调器。。我尝试了异步任务和处理程序,但没有成功。。任何暗示都将不胜感激。。多谢各位

编辑。。。 我已经在spinner onTouch事件上调用api来填充数据

 {
   private void ProvinceSpinnerCode(boolean IsEditCase) {

    if (IsEditCase) {
        //edit case condition
    } else {
        provinceSpinner.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mService = RetrofitManager.getApiClient().create(RetrofitInstance.class);
                Call<List<SelectModel>> provinceCall = mService.GetProvinces();
                provinceCall.enqueue(new Callback<List<SelectModel>>() {
                    @Override
                    public void onResponse(Call<List<SelectModel>> call, Response<List<SelectModel>> response) {
                        if (response.body().size() >= 0) {
                            provinceSpinner.setAdapter(new SpinnerAdapter(response.body(),AddCustomerActivity.this));

                        }
                    }

                    @Override
                    public void onFailure(Call<List<SelectModel>> call, Throwable t) {

                    }
                });
                return false;
            }
        });
    }

    provinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(AddCustomerActivity.this, "Id is : " + id, Toast.LENGTH_SHORT).show();
            provinceId = (int) id;
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });

}
{
专用void ProvinceSpinnerCode(布尔IsEditCase){
如果(IsEditCase){
//编辑案例条件
}否则{
provinceSpinner.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
mService=RefughtManager.getApiClient().create(RefughtInstance.class);
Call provinceCall=mService.GetProvinces();
provinceCall.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.body().size()>=0){
setAdapter(新的SpinnerAdapter(response.body(),AddCustomerActivity.this));
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
返回false;
}
});
}
provinceSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Toast.makeText(AddCustomerActivity.this,“Id为:”+Id,Toast.LENGTH\u SHORT.show();
provinceId=(int)id;
}
@凌驾
未选择公共无效(AdapterView arg0){
}
});
}

您正在触摸事件内部进行API调用,当您触摸微调器时将触发该事件,因此要解决此问题,只需在该事件(可能在Oncreate内部)外部执行API调用即可


现在provinceSpinner有一个触控监听器,因此当您第一次触控它打开时,它正在获取数据,因此当您再次单击它时,警报将显示数据(您第一次单击时获取的数据)

你能展示一下你是如何实现代码的,用数据填充微调器吗?@takieddine先生,我已经将我的代码放在onCreate函数上。我刚刚将我的客户适配器连接到微调器上。我想问题是因为微调器只会在ontouchlistener之后填充,而不会show@takieddine谢谢你的回复ir..我正在实现级联表单,其中我没有微调器..所以我需要一些事件触发器来检查前一个微调器是否有值..如果没有,那么我需要显示一些消息..这就是为什么我使用了onTouch Listner..先生,我可以使用任何其他设备..Onclick不工作…再次感谢..你知道如何调试应用程序吗!debugging有助于理解代码的运行情况