<LinearLayout android:id="@+id/sousuo_linear" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/diver1" android:layout_marginBottom="20dp" android:layout_marginTop="20dp" android:gravity="center"> <com.smarttrust.gupiao.view.MyAutohangqingTextView android:id="@+id/sousuo_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/hangqingzhongxin_sousuo" android:hint="输入股票名称或代码" android:maxEms="6" android:paddingLeft="10dp" android:textSize="@dimen/dimen12" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/hangqingzhongxin_sousuoimg" /> </LinearLayout> 使用:sousuo_edit = (MyAutohangqingTextView) view.findViewById(R.id.sousuo_edit); sousuo_edit.setCallback(new MyAutohangqingTextView.CallBack() { @Override public void reflish(String code) { symbol_code = code; getOffLineData(symbol_code);//刷新数据 } }); sousuo_edit.setAutoCompleteTextViewHelpListener(new InputMyAutoCompleteTextViewHelperListener()); sousuo_edit.setOnItemSelectedListener(new InputOnItemSelectedListener()); mDataSet = new DataSet(); mMyAutoCompleteTextViewDataSet = new DataSet();private void packDataSet(String key) { mMyAutoCompleteTextViewDataSet.clear(); for (int i = 0; i < mDataSet.size(); i++) { // if( mDataSet.getIndexData(i).startsWith(key) ){ mMyAutoCompleteTextViewDataSet.addData(mDataSet.getIndexData(i)); // } } } private class InputOnItemSelectedListener implements AdapterView.OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { num = position; } public void onNothingSelected(AdapterView<?> parent) { } } private class InputMyAutoCompleteTextViewHelperListener implements MyAutoCompleteTextViewHelperListener { @Override public DataSet refreshPostData(String key) { packDataSet(key); return mMyAutoCompleteTextViewDataSet; } @Override public void resetMarkNum() { num = -1; } }
//viewpackage com.smarttrust.gupiao.view; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import com.google.gson.Gson; import com.smarttrust.gupiao.CallBack.SelectCallBack; import com.smarttrust.gupiao.Model.SelectModel; import com.smarttrust.gupiao.R; import com.smarttrust.gupiao.bean.DataSet; import com.smarttrust.gupiao.listener.MyAutoCompleteTextViewHelperListener; import com.smarttrust.gupiao.utils.Constant; import com.smarttrust.gupiao.utils.LogUtils; import com.smarttrust.gupiao.utils.NetWorkUtils; import com.smarttrust.gupiao.utils.StringUtils; import com.zhy.http.okhttp.OkHttpUtils; import okhttp3.Call; import okhttp3.Response; public class MyAutohangqingTextView extends EditText { private Context mContext = null; private LayoutInflater mInflater = null; private AutoCompleteTextViewDropDownItem dropDown = null; private DataSet mDataSet = null; private String tripUrl = Constant.Url + "info/getStock.do"; /** * 自动完成文本框开始搜索的阈值,即输入的数量超过了这个阈值就开始搜索张贴栏,默认为1 **/ private int beginSearchThreshold = 1; /** * 状态标志量,true表示此次EditText的变化是由选中了下拉列表中的数据导致,结束此次监听事件;否则是由用户输入导致 **/ private boolean finishMark = false; private OnItemSelectedListener mOnItemSelectedListener = null; /** * 使用该控件的类务必实现该方法,否则无法刷新数据 **/ private MyAutoCompleteTextViewHelperListener mHelpListener = null; private String addUrl = Constant.Url + "info/addFollow.do"; private InputMethodManager imm; private CallBack callback; public void setCallback(CallBack callback) { this.callback = callback; } public MyAutohangqingTextView(Context context) { this(context, null); } public MyAutohangqingTextView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public MyAutohangqingTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(final Context mContext) { this.mContext = mContext; this.mInflater = LayoutInflater.from(this.mContext); /**为了避免空指针异常,提前初始化数据集 **/ mDataSet = new DataSet(); imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); /** 绑定可编辑文本框的字符变化监听器 **/ // addTextChangedListener(new EditTextInputTextWatcher()); this.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { LogUtils.LOGI("tag", "==beforeTextChanged="); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { LogUtils.LOGI("tag", "==onTextChanged="); if (finishMark) { finishMark = !finishMark; return; } if (mHelpListener != null) { mHelpListener.resetMarkNum(); } if (dropDown == null) { dropDown = new AutoCompleteTextViewDropDownItem(mContext); } if (s.length() >= beginSearchThreshold) { if (mHelpListener != null) { mDataSet = mHelpListener.refreshPostData(s.toString()); if (dropDown != null) { dropDown.notifyDataSetChanged(); } } if (!dropDown.isShowing()) { if (mDataSet.size() == 0) { return; } dropDown.showAsDropDown(MyAutohangqingTextView.this); } else { //关闭popupwindow if (mDataSet.size() == 0) { dropDown.dismiss(); } } } else { if (dropDown.isShowing()) { dropDown.dismiss(); } } } @Override public void afterTextChanged(Editable s) { LogUtils.LOGI("tag", "==afterTextChanged="); if (!StringUtils.isEmpty(s.toString())) { char c = s.toString().charAt(0); if (((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) { if (s.length() >= 2) { trip(s.toString()); } } else if (c >= '0' && c <= '9') { if (s.length() >= 4) { trip(s.toString()); } } } } }); } /** * 设置自动完成文本框的选择监听器,用于回调,务必在显示下拉列表前载入 */ public void setOnItemSelectedListener(OnItemSelectedListener mOnItemSelectedListener) { this.mOnItemSelectedListener = mOnItemSelectedListener; } /** * 设置自动完成文本框的助手类监听器,用于调用封装自动填补列表的数据 */ public void setAutoCompleteTextViewHelpListener(MyAutoCompleteTextViewHelperListener mHelpListener) { this.mHelpListener = mHelpListener; } /** * 设置刷新阈值 * * @param searchThreshold */ public void setSearchThreshold(int searchThreshold) { beginSearchThreshold = searchThreshold; } /** * 可编辑文本框的输入动态监听器,其中的方法是依次调用 */ private class EditTextInputTextWatcher implements TextWatcher { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { LogUtils.LOGI("tag=onTextChanged==", ""); if (finishMark) { finishMark = !finishMark; return; } if (mHelpListener != null) { mHelpListener.resetMarkNum(); } if (dropDown == null) { dropDown = new AutoCompleteTextViewDropDownItem(mContext); } if (s.length() >= beginSearchThreshold) { if (mHelpListener != null) { mDataSet = mHelpListener.refreshPostData(s.toString()); if (dropDown != null) { dropDown.notifyDataSetChanged(); } } if (!dropDown.isShowing()) { if (mDataSet.size() == 0) { return; } dropDown.showAsDropDown(MyAutohangqingTextView.this); } else { //关闭popupwindow if (mDataSet.size() == 0) { dropDown.dismiss(); } } } else { if (dropDown.isShowing()) { dropDown.dismiss(); } } } public void afterTextChanged(Editable s) { if (!StringUtils.isEmpty(s.toString())) { char c = s.toString().charAt(0); if (((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) { if (s.length() >= 2) { trip(s.toString()); } } else if (c >= '0' && c <= '9') { if (s.length() >= 4) { trip(s.toString()); } } } } } private void trip(String stock_code) { if (NetWorkUtils.isNetworkConnected(getContext())) { OkHttpUtils .get().addParams("stock_code", stock_code).addParams("pagenumber", 1 + "").addParams("pagecounts", 20 + "") .url(tripUrl) .build() .execute(new SelectCallBack() { @Override public SelectModel parseNetworkResponse(Response response, int i) throws Exception { String string = response.body().string(); LogUtils.LOGI("tag", string); LogUtils.LOGI("tag==data==", response.toString()); SelectModel model = new Gson().fromJson(string, SelectModel.class); return model; } @Override public void onError(Call call, Exception e, int i) { LogUtils.LOGE("error", e.toString()); // ToastUtils.shortToast(getContext(), "获取关注数据失败,请稍后重试"); } @Override public void onResponse(SelectModel model, int i) { if (model.info==10211111){ myOneDialog.Builder builder = new myOneDialog.Builder(getContext()); builder.setMessage("您输入的股票不存在,请重新输入"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } if (model.status == 1&&model.info==10211101) { if (model.data != null) { if (model.data.data != null) { for (int j = 0; j < model.data.data.size(); j++) { mDataSet.addData(model.data.data.get(j)); } } dropDown.showAsDropDown(MyAutohangqingTextView.this); } } } }); } else { Toast.makeText(getContext(), "当前网络不可用", Toast.LENGTH_SHORT).show(); } } /** * 在弹出式窗口结束后修改了EditText的值 * 此时要重置一遍该编辑框中的游标 */ public void setInputCursor() { setSelection(getText().toString().length()); } private class AutoCompleteTextViewDropDownItem extends PopupWindow { private ListView listView = null; private AutoCompleteTextViewDropDownItemAdapter adapter = null; private CustomAutoCompleteTextViewItemOnClickListener mOnClickListener = new CustomAutoCompleteTextViewItemOnClickListener(); public AutoCompleteTextViewDropDownItem(Context context) { super(context); adapter = new AutoCompleteTextViewDropDownItemAdapter(); View view = mInflater.inflate(R.layout.popup_select, null); listView = (ListView) view.findViewById(R.id.listview); listView.setAdapter(adapter); setWidth(LayoutParams.MATCH_PARENT); setHeight(LayoutParams.WRAP_CONTENT); /** 得到焦点,这句话务必注释掉,否则会阻塞可编辑文本框的输入 **/ // setFocusable(true); setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); setOutsideTouchable(true); //点击布局外失去焦点 setFocusableInTouchMode(true); setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); setContentView(view); } public void showAsDropDown(View view) { showAsDropDown(view, 0, 0); // 保证尺寸是根据屏幕像素密度来的 update(); //刷新 } public void notifyDataSetChanged() { adapter.notifyDataSetChanged(); } /** * 内部类,自动完成文本框的下拉列表的适配器 */ private class AutoCompleteTextViewDropDownItemAdapter extends BaseAdapter { public int getCount() { return mDataSet.size(); } public Object getItem(int position) { return mDataSet.getIndexData(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { AutoCompleteTextViewDropDownItemHolder holder = null; if (convertView == null) { holder = new AutoCompleteTextViewDropDownItemHolder(); convertView = mInflater.inflate(R.layout.pop_item_select, null); holder.position = position; holder.bank_no = (TextView) convertView.findViewById(R.id.bank_no); holder.txt = (TextView) convertView.findViewById(R.id.bank_name); holder.letter = (TextView) convertView.findViewById(R.id.letter); convertView.setTag(holder); } else { holder = (AutoCompleteTextViewDropDownItemHolder) convertView.getTag(); } convertView.setOnClickListener(mOnClickListener); holder.txt.setText(mDataSet.getIndexData(position).S_NAME); holder.bank_no.setText(mDataSet.getIndexData(position).S_CODE); holder.letter.setText(mDataSet.getIndexData(position).LETTER_CODE); return convertView; } } private final class AutoCompleteTextViewDropDownItemHolder { public int position; public TextView txt, bank_no, letter; } private class CustomAutoCompleteTextViewItemOnClickListener implements OnClickListener { @Override public void onClick(View v) { /** 置标记变量为true,表示接下来给可编辑文本框的赋值是我们控制的,不是用户输入的,跳过此次监听事件 **/ finishMark = true; TextView mTextView = (TextView) v.findViewById(R.id.bank_no); String content = mTextView.getText().toString(); // MyAutoCompleteTextView.this.setText(content); setInputCursor(); if (mOnItemSelectedListener != null) { AutoCompleteTextViewDropDownItemHolder holder = (AutoCompleteTextViewDropDownItemHolder) v.getTag(); /** 注意第一个变量我用了null,所以在Activity中不可取值,这点要切记,尽管基本用不到它 **/ mOnItemSelectedListener.onItemSelected(null, holder.txt, holder.position, holder.position); } // AutoCompleteTextViewDropDownItem.this.dismiss(); dropDown.dismiss(); callback.reflish(content); MyAutohangqingTextView.this.setText(""); imm.hideSoftInputFromWindow(getWindowToken(), 0); //强制隐藏键盘 } } } //定义接口 public interface CallBack { public void reflish(String code); } }
模糊查询 根据接口获取联想数据 查询出来数据还可以继续输入
最新推荐文章于 2023-05-03 11:56:02 发布