android:id="@+id/search_rlv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
rlvadapter_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:background="#FFF"
android:id="@+id/mlinear"
android:orientation="horizontal">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/rlv_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
app:placeholderImage="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="20dp"
android:text="红烧肉"
android:textColor="#000"
android:textSize="25sp" />
</LinearLayout>
java类
bean
@Entity
public class Cook {
@Id(autoincrement = true)
private Long id;
private String name;
@Generated(hash = 903386829)
public Cook(Long id, String name) {
this.id = id;
this.name = name;
}
@Generated(hash = 795568660)
public Cook() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Cook{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
MyApp
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化Fresco
Fresco.initialize(this);
GreenDaoUtils.initGreenDao(this);
}
}
OkHttpUtils
public class OkHttpUtils {
private static OkHttpUtils httpUtils;
private final OkHttpClient client;
//单例模式
private OkHttpUtils() {
//创建拦截器
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
//初始化OkHttp
client = new OkHttpClient.Builder()
.addInterceptor(logging)//添加拦截器
.connectTimeout(5, TimeUnit.SECONDS)//设置连接超时
.build();
}
public static OkHttpUtils getHttpUtils() {
if (httpUtils == null) {
synchronized (OkHttpUtils.class) {
if (httpUtils == null) {
httpUtils = new OkHttpUtils();
}
}
}
return httpUtils;
}
/**
* GET请求
*
* @param url 请求地址
* @param callback 回调
*/
public void doGet(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
/**
* post请求
*
* @param url 请求地址
* @param params 请求参数
* @param callback 回调
*/
public void doPost(String url, Map<String, String> params, Callback callback) {
//这里可以加网络判断
//创建Request
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
client.newCall(request).enqueue(callback);
}
}
OnNetListener
public interface OnNetListener<T> {
public void onSuccess(T t);
public void onFailure(Exception e);
}
UrlsAPi
public class UrlsAPi {
public static final String BASE_URL = "http://apis.juhe.cn/cook/query.php";
}
IMainModel
public interface IMainModel {
public void getCook(String key, String menu, OnNetListener<CookBean> onNetListener);
}
MainModel
public class MainModel extends BaseModel implements IMainModel {
@Override
public void getCook(String key, String menu, final OnNetListener<CookBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("key", key);
params.put("menu", menu);
OkHttpUtils.getHttpUtils().doPost(UrlsAPi.BASE_URL, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final CookBean cookBean = new Gson().fromJson(string, CookBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(cookBean);
}
});
}
});
}
}
BaseModel
public class BaseModel {
protected Handler handler = new Handler(Looper.getMainLooper());
}
IMainView
public interface IMainView {
public void showData(CookBean cookBean);
}
MainPresenter
public class MainPresenter extends BasePresenter {
private IMainView iMainView;
private final IMainModel iMainModel;
public MainPresenter(IMainView iMainView) {
this.iMainView = iMainView;
iMainModel = new MainModel();
}
public void getCook(String menu) {
iMainModel.getCook("2bbfedc295a8bb828111c047c47b4000", menu, new OnNetListener<CookBean>() {
@Override
public void onSuccess(CookBean cookBean) {
if (cookBean.getResultcode().equals("200")) {
iMainView.showData(cookBean);
}
}
@Override
public void onFailure(Exception e) {
}
});
}
public void onDetach() {
if (iMainView != null) {
iMainView = null;
}
}
}
MyRlvAdapter
public class MyRlvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<CookBean.ResultBean.DataBean> dataList;
private LayoutInflater inflater;
private OnItemLongClickListener onItemLongClickListener;
public MyRlvAdapter(Context context, List<CookBean.ResultBean.DataBean> dataList) {
this.context = context;
this.dataList = dataList;
inflater = LayoutInflater.from(context);
}
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
public interface OnItemLongClickListener {
void onItemClick(View view, int position);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.rlvadapter_item, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
MyViewHolder myViewHolder = (MyViewHolder) holder;
final CookBean.ResultBean.DataBean dataBean = dataList.get(position);
String images = dataBean.getAlbums().get(0);
myViewHolder.rlvSdv.setImageURI(images);
myViewHolder.tvTitle.setText(dataBean.getTitle());
myViewHolder.mlinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataList.remove(position);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return dataList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.rlv_sdv)
SimpleDraweeView rlvSdv;
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.mlinear)
LinearLayout mlinear;
public MyViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
Activity
public class SearchActivity extends AppCompatActivity implements IMainView {
@BindView(R.id.iv_back)
ImageView ivBack;
@BindView(R.id.ed_menu)
EditText edMenu;
@BindView(R.id.bt_sousuo)
Button btSousuo;
@BindView(R.id.search_rlv)
RecyclerView searchRlv;
private MainPresenter mainPresenter;
private String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
ButterKnife.bind(this);
Intent intent = getIntent();
name = intent.getStringExtra("name");
mainPresenter = new MainPresenter(this);
mainPresenter.getCook(name);
//设置布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
searchRlv.setLayoutManager(layoutManager);
}
@OnClick({R.id.iv_back, R.id.bt_sousuo})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.iv_back:
//返回
this.finish();
break;
case R.id.bt_sousuo:
//搜索
mainPresenter.getCook(name);
break;
}
}
@Override
public void showData(final CookBean cookBean) {
List<CookBean.ResultBean.DataBean> data = cookBean.getResult().getData();
MyRlvAdapter myRlvAdapter = new MyRlvAdapter(this, data);
searchRlv.setAdapter(myRlvAdapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
ButterKnife.bind(this).unbind();
//防止内存泄漏
if (mainPresenter != null) {
mainPresenter.onDetach();
mainPresenter = null;
}
}
}