首先用OKHttp3获取网络上的数据,并保存到Serializeable的Bean类集合
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(path+i)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String str = response.body().string();
QBean Q = new Gson().fromJson(str,QBean.class);
list.addAll(Q.getData());
response.body().close();//关闭反应体
handler.sendEmptyMessage(1);//获取完网络数据 调用handler更新数据
Log.e("oooo",i+"");
}
}
});
之后通知Handler更新数据
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
initData();
handler.removeMessages(1);;//关闭handler 防止内存泄漏
}
};
}
private void initData() {
adapter = new MyAdapter(MainActivity.this,list);
list_view_id.setAdapter(adapter);
initData_data();
arrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data) ;
auto_text_view.setAdapter(arrayAdapter);
}
在这里 AutoCompleteTextView 使用的是 数组适配 做到简单快速
之后是 实现网络数据 与 AutoCompleteTextView适配器里面的一个更新交互
data = new ArrayList<>();
if(list.size()<=0){
return;
}else {
for (int i = 0; i < list.size(); i++) {
String tit = list.get(i).getTitle().trim().toString();
data.add(tit);
}
}
最后 实现数据传递 以及 接收收据
重点:
AutoCompleteTextView 的 OnItemSelectedListener事件没有做处理!
所以在使用这个类时,OnItemClickListener有效果,而OnItemSelectedListener没有效果的
auto_text_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.e("onItemClick",i+"");
for (int k = 0; k < data.size(); k++) {
if(auto_text_view.getText().toString().equals(data.get(k))){
Intent intent = new Intent(MainActivity.this,DetailsActivity.class);
ArrayList<QBean.DataBean> bean = new ArrayList<>();//todo 获取需要的信息
bean.add(list.get(k));
intent.putExtra("bean",bean);
startActivity(intent);