MVP的封裝模式及RecyclewView解析資料
阿新 • • 發佈:2018-12-21
首先寫Model介面
public interface Model {
void requestData(String Murl, String keywords, String page, int sort, MyCallBack myCallBack);
}
MyModel的封裝類
public class MyModel implements Model {
private MyCallBack myCallBack;
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = (String) msg.obj;
Gson gson = new Gson();
Data data = gson.fromJson(s, Data.class);
myCallBack.Success(data);
}
};
@Override public void requestData(final String Murl, final String keyword, final String page, final int sort, MyCallBack myCallBack) { this.myCallBack=myCallBack; new Thread(new Runnable() { @Override public void run() { OkHttpUtils.getInstance().postAsync(Murl, keyword, page, sort, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); mHandler.sendMessage(mHandler.obtainMessage(0,s)); } }); } }).start(); }
}
MainActivity的程式碼
public class Main3Activity extends AppCompatActivity implements View.OnClickListener {
private String Murl = "http://www.wanandroid.com/tools/mockapi/6523/restaurant-list"; private CheckBox qx; private TextView xl; private TextView price; private ExpandableListView edit_query; private List<MyData.DataBean> mdata=new ArrayList<>(); private MyBaseAdapter myBaseAdapter; private Handler mHandler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); String s = (String) msg.obj; Gson gson = new Gson(); MyData myData = gson.fromJson(s, MyData.class); mdata=myData.getData(); //重新整理介面卡 myBaseAdapter.setList(mdata); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); initView(); // myBaseAdapter = new MyBaseAdapter(this, mdata); edit_query.setAdapter(myBaseAdapter); //開始解析資料 GsonData(); } private void GsonData() { OkHttpUtils.getInstance().getAsync(Murl, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); mHandler.sendMessage(mHandler.obtainMessage(0,s)); } }); qx.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean allGoods = myBaseAdapter.isAllGoods(); myBaseAdapter.isAllGoodsChecked(!allGoods); //重新整理資料 myBaseAdapter.notifyDataSetChanged(); } }); } private void initView() { qx = (CheckBox) findViewById(R.id.qx); xl = (TextView) findViewById(R.id.xl); price = (TextView) findViewById(R.id.price); edit_query = (ExpandableListView) findViewById(R.id.edit_query); } @Override public void onClick(View v) { myBaseAdapter.setCallBack(new MyBaseAdapter.AdapterCallBack() { //組被選中 @Override public void setGroupCheck(int groupPostion) { boolean check = myBaseAdapter.isChildAllCheck(groupPostion); myBaseAdapter.childAllCheck(groupPostion,check); myBaseAdapter.notifyDataSetChanged(); } //子佈局被選中 @Override public void setCHhildCheck(int groupPostion, int childgroupPostion) { boolean childChecked = myBaseAdapter.isChildChecked(groupPostion, childgroupPostion); myBaseAdapter.setChildChecked(groupPostion,childgroupPostion,childChecked); myBaseAdapter.notifyDataSetChanged(); } //設定數量 @Override public void setmNuber(int groupPostion, int childgroupPostion, int number) { } }); }
}
介面卡
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements View.OnClickListener{
private Context context;
private List<Data.DataBean> mdata;
public MyAdapter(Context context, List<Data.DataBean> mdata) {
this.context = context;
this.mdata = mdata;
}
public void setMdata(List<Data.DataBean> mdata) {
this.mdata = mdata;
//重新整理介面卡
notifyDataSetChanged();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.item_one, null);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
Data.DataBean bean = mdata.get(i);
String s = bean.getImages();
String s1 = s.substring(0, s.indexOf("|"));
myViewHolder.price.setText(bean.getBargainPrice()+"");
myViewHolder.title.setText(bean.getTitle());
myViewHolder.pj.setText(bean.getPrice()+"");
Glide.with(context).load(s1).into(myViewHolder.img);
myViewHolder.itemView.setOnClickListener(this);
myViewHolder.itemView.setTag(i);
myViewHolder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, Main3Activity.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mdata.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private ImageView img;
private TextView title;
private TextView price;
private TextView pj;
private Button add;
public MyViewHolder(View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
title = itemView.findViewById(R.id.title);
price=itemView.findViewById(R.id.price);
pj=itemView.findViewById(R.id.pj);
add=itemView.findViewById(R.id.add);
}
}
public interface setOnItemclick{
void ItemClick(View v, int postion);
}
public setOnItemclick setOnItemclick;
public MyAdapter(MyAdapter.setOnItemclick setOnItemclick) {
this.setOnItemclick = setOnItemclick;
}
@Override
public void onClick(View v) {
setOnItemclick.ItemClick(v,(int)v.getTag());
}
}