1. 程式人生 > >MVP的封裝模式及RecyclewView解析資料

MVP的封裝模式及RecyclewView解析資料

首先寫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());
}

}