NumDialog.java
7.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
package com.naji.xiaotao.tangshi.ui;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import com.naji.xiaotao.App;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.ui.CookBookMainActivity;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.entity.OrderEntity;
import com.naji.xiaotao.tangshi.entity.TableItem;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.util.DialogUtil;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.MaterialDialogUtils;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class NumDialog extends DialogFragment {
private Dialog dialog;
private EditText eatingNumEdt;
private View rootView;//activity的根视图
int rootViewVisibleHeight;//纪录根视图的显示高度
private TableItem item;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getArguments()!=null){
item=getArguments().getParcelable("table");
}
context=getActivity();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 使用不带Theme的构造器, 获得的dialog边框距离屏幕仍有几毫米的缝隙。
dialog = new Dialog(context, R.style.NumDialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定
View contentView = View.inflate(context, R.layout.dialog_eating_num, null);
eatingNumEdt=contentView.findViewById(R.id.eating_num_edt);
if(item!=null){
eatingNumEdt.setText(item.getTable_pnum());
eatingNumEdt.setSelection(item.getTable_pnum().length());
}else{
eatingNumEdt.setText("2");
eatingNumEdt.setSelection(1);
}
eatingNumEdt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if(actionId== EditorInfo.IME_ACTION_NEXT){
if(TextUtils.isEmpty(eatingNumEdt.getText().toString())){
ToastUtils.showShort("用餐人数不能为空");
return false;
}
dialog.dismiss();
createOrder();
}
return false;
}
});
rootView=dialog.getWindow().getDecorView();
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
int visibleHeight = r.height();
System.out.println(""+visibleHeight);
if (rootViewVisibleHeight == 0) {
rootViewVisibleHeight = visibleHeight;
return;
}
//根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变
if (rootViewVisibleHeight == visibleHeight) {
return;
}
//根视图显示高度变小超过200,可以看作软键盘显示了
if (rootViewVisibleHeight - visibleHeight > 200) {
KLog.d("软键盘显示");
rootViewVisibleHeight = visibleHeight;
return;
}
//根视图显示高度变大超过200,可以看作软键盘隐藏了
if (visibleHeight - rootViewVisibleHeight > 200) {
KLog.d("软键盘隐藏");
dialog.dismiss();
rootViewVisibleHeight = visibleHeight;
return;
}
}
});
contentView.findViewById(R.id.exit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.setContentView(contentView);
dialog.setCanceledOnTouchOutside(true); // 外部点击取消
// 设置宽度为屏宽, 靠近屏幕底部。
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM; // 紧贴底部
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
return dialog;
}
private void createOrder(){
Map<String,String> params=new HashMap<>();
params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
params.put("openid", SPUtils.getInstance("user_info").getString("openid"));
params.put("tableid",item==null?"":item.getId());
params.put("pnum",eatingNumEdt.getText().toString());
RetrofitClient.getInstance().create(TangshiApiService.class)
.createOrder(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
DialogUtil.showDialog(context);
}
})
.subscribe(new Consumer<BaseResponse<List<OrderEntity>>>() {
@Override
public void accept(BaseResponse<List<OrderEntity>> baseResponse) throws Exception {
DialogUtil.dismissDialog();
if (baseResponse.getRet()==200){
KLog.d("context",context);
Intent intent=new Intent(context,CookBookMainActivity.class);
intent.putExtra("orderid",baseResponse.getData().get(0).getId());
intent.putExtra("isFast",getArguments().getBoolean("isFast",false));
context.startActivity(intent);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
DialogUtil.dismissDialog();
throwable.printStackTrace();
ToastUtils.showShort(throwable.msg);
}
});
}
}