用MVP+OKHTTP+Fresco+RecyclerView+EventBus等功能实现,点击条目时进行传值,并且显示出来
首先看一下依赖
compile 'com.jakewharton:butterknife:8.8.1'
compile 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okio:okio:1.13.0'
implementation 'com.google.code.gson:gson:2.2.4'
compile 'org.greenrobot:eventbus:3.0.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'
View层
public interface IShowView {
public void showData();
public void showRefresh(List<DataBean.DatasBean.GoodsCommendListBean> list);
}
MODEL层
public interface IGetModel {
public void LoadData(Callback callback);
}
public class GetModel implements IGetModel{
@Override
public void LoadData(Callback callback) {
OkHttpUtils.getInstance().doGet("http://169.254.194.209/mobile/index.php?act=goods&op=goods_detail&goods_id=100009",callback);
}
}
PRESENTER层
public class DataPresenter {
GetModel model;
IShowView view;
DataBean bean;
List<DataBean.DatasBean.GoodsCommendListBean> list=new ArrayList<>();
public DataPresenter(IShowView view) {
this.view = view;
this.model=new GetModel();
}
public void DPshowData(){
model.LoadData(new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) throws IOException {
Gson gson=new Gson();
bean=gson.fromJson(result,DataBean.class);
Log.i("+++++++++", "onSuccess: "+bean.getDatas().getGoods_commend_list().toString());
list.addAll(bean.getDatas().getGoods_commend_list());
view.showRefresh(list);
}
});
}
}
第一个Activity
public class MainActivity extends AppCompatActivity implements IShowView {
private RecyclerView mRv;
List<DataBean.DatasBean.GoodsCommendListBean> list;
DataPresenter presenter;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
presenter=new DataPresenter(this);
showData();
presenter.DPshowData();
}
@Override
public void showData() {
LinearLayoutManager manager = new LinearLayoutManager(this);
adapter=new MyAdapter(this,list);
mRv.setLayoutManager(manager);
mRv.setAdapter(adapter);
}
@Override
public void showRefresh(List<DataBean.DatasBean.GoodsCommendListBean> list) {
adapter.setRefresh(list);
}
private void initView() {
mRv = (RecyclerView) findViewById(R.id.rv);
}
}
适配器
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
Context context;
List<DataBean.DatasBean.GoodsCommendListBean> list;
OnItemClickListener listener;
public interface OnItemClickListener{
public void OnItemClick(View view,int position,String pc,String name);
}
public void setOnItemClick(OnItemClickListener listener){
this.listener=listener;
}
public MyAdapter(Context context,List<DataBean.DatasBean.GoodsCommendListBean> list) {
this.context = context;
this.list=list;
}
public void setRefresh(List<DataBean.DatasBean.GoodsCommendListBean> list){
this.list=list;
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context,R.layout.recy_item,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
((MyViewHolder)holder).sdv.setImageURI(list.get(position).getGoods_image_url());
((MyViewHolder)holder).tv.setText(list.get(position).getGoods_name()+" ¥"+list.get(position).getGoods_promotion_price());
final String pc=list.get(position).getGoods_image_url();
final String name=list.get(position).getGoods_name();
final String price=list.get(position).getGoods_promotion_price();
// 条目的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//实例化Message对象将数据发送出去然后进行跳转
Message message = new Message(pc,name,price);
EventBus.getDefault().postSticky(message);
Intent intent = new Intent(context,Main2Activity.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return list!=null?list.size():0;
}
class MyViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView sdv;
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
sdv=itemView.findViewById(R.id.sdv);
tv=itemView.findViewById(R.id.tv);
}
}
}
第二个Activity
public class Main2Activity extends AppCompatActivity {
private TextView mTv;
private SimpleDraweeView mSdv;
String pc;
String name;
String price;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
EventBus.getDefault().register(this);
mSdv = (SimpleDraweeView) findViewById(R.id.sdv);
mTv = (TextView) findViewById(R.id.tv);
//接收数据并将数据显示出来
mTv.setText(name+"\r\n"+"价格:¥"+price);
mSdv.setImageURI(pc);
}
//注解
@Subscribe(sticky = true)
public void EventMessage(Message message){
name=message.getName();
pc=message.getPc();
price=message.getPrice();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
存储信息的类
public class Message {
String pc;
String name;
String price;
public Message(String pc, String name, String price) {
this.pc = pc;
this.name = name;
this.price = price;
}
public String getPc() {
return pc;
}
public void setPc(String pc) {
this.pc = pc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Message{" +
"pc='" + pc + '\'' +
", name='" + name + '\'' +
", price='" + price + '\'' +
'}';
}
}