You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pocketcommunityclient/app/src/main/java/com/community/pocket/ui/main/ui/visitor/appointment/VisitorAppointmentFragment....

215 lines
7.8 KiB

package com.community.pocket.ui.main.ui.visitor.appointment;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.community.pocket.R;
import com.community.pocket.data.adapter.VisitorAdpter;
import com.community.pocket.ui.BaseFragment;
import com.community.pocket.ui.listener.MyTextChange;
import com.community.pocket.ui.main.ui.share.MyAutoCompleteTextView;
import com.community.pocket.ui.main.ui.share.ShowWordCount;
import com.community.pocket.ui.main.ui.visitor.VisitorFragment;
import com.community.pocket.util.PropertiesUtil;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 访客预约界面
*/
@ContentView(R.layout.visitor_appointment_fragment)
public class VisitorAppointmentFragment extends BaseFragment {
//搜索预约住户
@ViewInject(R.id.appointment)
private AutoCompleteTextView appointment;
//预约时间
@ViewInject(R.id.choose_time)
private Spinner chooseTime;
//备注信息
@ViewInject(R.id.notes)
private EditText notes;
//提交按钮
@ViewInject(R.id.submit)
private Button submit;
private VisitorViewModel appointmentViewModel;
//动态更新搜索框数据源
private MyAutoCompleteTextView myAutoCompleteTextView;
//预约人数据呀
private VisitorAdpter visitorAdpter;
//预约时间数据
private ArrayAdapter<String> timeAdpter;
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ShowWordCount showWordCount = new ShowWordCount(new int[]{R.id.show_word_top, R.id.show_word_bottom}, R.id.notes, view);
showWordCount.showCount();
appointmentViewModel = new ViewModelProvider(this, new VisitorAppointmentFactory()).get(VisitorViewModel.class);
myAutoCompleteTextView = new MyAutoCompleteTextView(appointment, appointmentViewModel);
//监听访客预约表单校验状态
appointmentViewModel.getVisitorFormState().observe(getViewLifecycleOwner(), new Observer<VisitorFormState>() {
@Override
public void onChanged(VisitorFormState visitorFormState) {
if (visitorFormState == null) {
return;
}
submit.setEnabled(visitorFormState.isDataValid());
if (visitorFormState.getAppointmentError() != null) {
appointment.setError(getString(visitorFormState.getAppointmentError(), PropertiesUtil.getIntValue("username.length")));
}
if (visitorFormState.getNotesError() != null) {
notes.setError(getString(visitorFormState.getNotesError()));
}
}
});
//监听预约请求结果
appointmentViewModel.getVisitorResponse().observe(getViewLifecycleOwner(), new Observer<VisitorResponse>() {
@Override
public void onChanged(VisitorResponse visitorResponse) {
if (visitorResponse == null) {
return;
}
if (visitorResponse.getSuccess() != null) {
Toast.makeText(getContext(), visitorResponse.getSuccess(), Toast.LENGTH_LONG).show();
VisitorFragment visitorFragment = getParentFragment(2);
Button button = Objects.requireNonNull(visitorFragment.getView()).findViewById(R.id.visitor_reservation);
try {
Method method = VisitorFragment.class.getDeclaredMethod("my", View.class);
method.setAccessible(true);
method.invoke(visitorFragment, button);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
if (visitorResponse.getError() != null) {
Toast.makeText(getContext(), visitorResponse.getError(), Toast.LENGTH_LONG).show();
}
}
});
//检索预约人请求结果
appointmentViewModel.getSearchPeopleReq().observe(getViewLifecycleOwner(), new Observer<VisitorResponse<Map<String, List<String>>>>() {
@Override
public void onChanged(VisitorResponse<Map<String, List<String>>> visitorResponse) {
if (visitorResponse == null) {
return;
}
if (visitorResponse.getSuccess() != null) {
initSearch(visitorResponse.getBody());
}
if (visitorResponse.getError() != null) {
Toast.makeText(getContext(), visitorResponse.getError(), Toast.LENGTH_LONG).show();
}
}
});
appointment.addTextChangedListener(new MyTextChange() {
@Override
public void afterTextChanged(Editable s) {
if (timeAdpter != null) {
timeAdpter.clear();
}
if (s.toString().equals(appointment.getTag(R.string.visitor_tag))) {
return;
}
if (visitorAdpter != null && visitorAdpter.containsKey(s.toString())) {
appointmentViewModel.appointmentDataChanged(appointment.getText(), notes.getText());
initTime(s);
}
appointment.setTag(R.string.visitor_tag, s.toString());
myAutoCompleteTextView.searchHandler();
}
});
notes.addTextChangedListener(new MyTextChange() {
@Override
public void afterTextChanged(Editable s) {
appointmentViewModel.appointmentDataChanged(appointment.getText(), notes.getText());
}
});
}
/**
* 搜索框
*/
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void initSearch(Map<String, List<String>> arrays) {
// 设置适配器
if (visitorAdpter == null) {
visitorAdpter = new VisitorAdpter(arrays, getContext());
// 将适配器与当前AutoCompleteTextView控件绑定
appointment.setAdapter(visitorAdpter);
} else {
visitorAdpter.addAll(arrays);
}
myAutoCompleteTextView.refreshDropList();
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void initTime(Editable e) {
if (timeAdpter == null) {
timeAdpter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), android.R.layout.simple_list_item_1, visitorAdpter.getTime(e.toString()));
chooseTime.setAdapter(timeAdpter);
} else {
timeAdpter.clear();
timeAdpter.addAll(visitorAdpter.getTime(e.toString()));
}
}
/**
* 提交预约信息
*/
@Event(value = R.id.submit)
private void submit(View view) {
appointmentViewModel.appointment(appointment.getText().toString(), chooseTime.getSelectedItem().toString(), notes.getText().toString());
}
}