activity_main
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context="com.bwie.test.mygou.MainActivity"> <ListView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:id="@+id/lv"> </ListView> <android.support.v7.widget.RecyclerView android:layout_width="0dp" android:layout_height="match_parent" android:id="@+id/recy1" android:layout_weight="8"> </android.support.v7.widget.RecyclerView> </LinearLayout>
activity_image
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.test.mygou.ImageActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewpage"> </android.support.v4.view.ViewPager> </LinearLayout>
activity_sou_suo
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.test.mygou.SouSuoActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="商品列表" android:layout_gravity="center_horizontal" /> <com.jcodecraeer.xrecyclerview.XRecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/xre"> </com.jcodecraeer.xrecyclerview.XRecyclerView> </LinearLayout>
activity_xiang_qing
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.test.mygou.XiangQingActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/vp"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_below="@+id/vp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/xx_tv1" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/xx_tv2" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/xx_tv3" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="加入购物车" android:onClick="jiaru" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" /> </LinearLayout>
layout_item01
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recy2"> </android.support.v7.widget.RecyclerView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/item_tv" /> </LinearLayout>
layout_item02
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginLeft="20dp"> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/item2_iv" android:src="@mipmap/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/item2_tv" /> </LinearLayout>
layout_list
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="20dp"> <TextView android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listview_tv" /> </LinearLayout>
layout_sousuo
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:layout_width="0dp" android:layout_weight="3" android:layout_height="100dp" android:id="@+id/ss_iv" /> <LinearLayout android:layout_width="0dp" android:layout_weight="7" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ss_tv1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ss_tv2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ss_tv3" android:textColor="@android:color/holo_red_dark" /> </LinearLayout> </LinearLayout>
MainActivity
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.bwie.test.adapter.LeftAdapter; import com.bwie.test.adapter.MyAdapter; import com.bwie.test.bean.LeftBean; import com.bwie.test.bean.RightBean; import com.bwie.test.presenter.LeftPresenter; import com.bwie.test.presenter.Rightpresenter; import com.bwie.test.view.LeftView; import com.bwie.test.view.RightView; import java.util.List; public class MainActivity extends AppCompatActivity implements LeftView,RightView{ ListView lv; RecyclerView recy1; private int cid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //隐藏原有标题 getSupportActionBar().hide(); lv=findViewById(R.id.lv); recy1=findViewById(R.id.recy1); LeftPresenter leftPresenter = new LeftPresenter(this); leftPresenter.getleftdata(); recy1.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false)); } @Override public void Onsuccess(final LeftBean leftBean) { runOnUiThread(new Runnable() { @Override public void run() { final List<LeftBean.DataBean> data=leftBean.getData(); LeftAdapter leftadapter = new LeftAdapter(MainActivity.this, data); lv.setAdapter(leftadapter); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { cid = data.get(position).getCid(); Rightpresenter rightpresenter = new Rightpresenter(MainActivity.this); rightpresenter.getrightdata(cid); } }); } }); } @Override public void RightSuccess(final RightBean rightBean) { runOnUiThread(new Runnable() { @Override public void run() { List<RightBean.DataBean> data = rightBean.getData(); MyAdapter myAdapter = new MyAdapter(MainActivity.this, data); recy1.setAdapter(myAdapter); } }); } }
ImageActivity
import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.bwie.test.view.ZoomImageView; import java.util.ArrayList; public class ImageActivity extends AppCompatActivity { private ViewPager viewPager; private ArrayList<String> imageUrls; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image); //查找控件 viewPager = (ViewPager) findViewById(R.id.viewpage); //获取导数据 imageUrls = getIntent().getStringArrayListExtra("list"); if (imageUrls != null){ viewPager.setAdapter(new PagerAdapter() { @Override public Object instantiateItem(ViewGroup container, int position) { ZoomImageView imageView = new ZoomImageView(ImageActivity.this); //加载图片显示 Glide.with(ImageActivity.this).load(imageUrls.get(position)).into(imageView); //添加 container.addView(imageView); //返回 return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return imageUrls.size(); } }); } } }
SouSuoActivity
import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import com.bwie.test.adapter.MyAdapter; import com.bwie.test.adapter.SouSuoAdapter; import com.bwie.test.adapter.ZhongAdapter; import com.bwie.test.bean.SouSuoBean; import com.bwie.test.presenter.SouSuoPresenter; import com.bwie.test.view.SouSuoView; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; import java.util.List; public class SouSuoActivity extends AppCompatActivity implements SouSuoView{ XRecyclerView xre; int page = 1; private SouSuoPresenter ssPresenter; private int pscid; private SouSuoAdapter souSuoAdapter; private List<SouSuoBean.DataBean> list; private List<SouSuoBean.DataBean> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sou_suo); //隐藏原有标题 getSupportActionBar().hide(); //查找控件 xre=findViewById(R.id.xre); xre.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false)); Intent intent = getIntent(); pscid = intent.getIntExtra("pscid",1); Log.i("TAg---", "v层数据 "+pscid); ssPresenter = new SouSuoPresenter(this); ssPresenter.getdata(pscid,page); xre.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false)); xre.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { list.clear(); page=1; ssPresenter.getdata(pscid, page); souSuoAdapter.notifyDataSetChanged(); xre.refreshComplete(); } @Override public void onLoadMore() { page++; ssPresenter.getdata(pscid, page); souSuoAdapter.notifyDataSetChanged(); xre.refreshComplete(); } }); } @Override public void OnSuccess(final SouSuoBean souSuoBean) { runOnUiThread(new Runnable() { @Override public void run() { Log.i("TAG-----", "v层数据"+souSuoBean); data = souSuoBean.getData(); list = new ArrayList<>(); list.addAll(data); souSuoAdapter = new SouSuoAdapter(list, SouSuoActivity.this); xre.setAdapter(souSuoAdapter); souSuoAdapter.setOnItemClickListener(new ZhongAdapter.OnItemClickListener() { @Override public void onItemClick(int pos) { Intent intent=new Intent(SouSuoActivity.this, XiangQingActivity.class); intent.putExtra("pid",data.get(pos).getPid()); startActivity(intent); } }); } }); } }
XiangQingActivity
import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.bwie.test.bean.XiangQingBean; import com.bwie.test.presenter.XiangQingPresenter; import com.bwie.test.util.OkHttp; import com.bwie.test.view.XaingQingView; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class XiangQingActivity extends AppCompatActivity implements XaingQingView{ ViewPager vp; TextView t1,t2,t3; private XiangQingBean.DataBean data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xiang_qing); //查找控件 vp=findViewById(R.id.vp); t1=findViewById(R.id.xx_tv1); t2=findViewById(R.id.xx_tv2); t3=findViewById(R.id.xx_tv3); Intent intent = getIntent(); int pid = intent.getIntExtra("pid", 12); XiangQingPresenter presenter = new XiangQingPresenter(this); presenter.getdata(pid); } @Override public void OnSuccess(final XiangQingBean xiangQingBean) { runOnUiThread(new Runnable() { @Override public void run() { data = xiangQingBean.getData(); t1.setText(data.getTitle()); t2.setText("¥"+ data.getPrice()); t3.setText("优惠价:¥"+ data.getPrice()); String[] split = data.getImages().split("\\|"); final ArrayList<String> list=new ArrayList<>(); for (int i=0;i<split.length;i++){ list.add(split[i]); } vp.setAdapter(new PagerAdapter() { @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(XiangQingActivity.this); Glide.with(XiangQingActivity.this).load(list.get(position)).into(imageView); container.addView(imageView); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(XiangQingActivity.this, ImageActivity.class); intent.putExtra("list",list); startActivity(intent); } }); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }); } }); } public void jiaru(View view) { Map<String,String> map = new HashMap<>(); map.put("pid", String.valueOf(data.getPid())); map.put("uid","11452"); OkHttp.doPost("https://www.zhaoapi.cn/product/addCart", map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ String string = response.body().string(); try { JSONObject jsonObject = new JSONObject(string); final String code = jsonObject.getString("msg"); if("加购成功".equals(code)){ runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(XiangQingActivity.this, code, Toast.LENGTH_SHORT).show(); } }); } } catch (Exception e) { e.printStackTrace(); } } } }); } }
adapter文件夹下LeftAdapter
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.bwie.test.bean.LeftBean; import com.bwie.test.mygou.R; import java.util.List; public class LeftAdapter extends BaseAdapter{ Context context; List<LeftBean.DataBean> data; public LeftAdapter(Context context, List<LeftBean.DataBean> data) { this.context = context; this.data = data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View view, ViewGroup viewGroup) { ViewHolder vh; if (view == null){ vh = new ViewHolder(); view = View.inflate(context, R.layout.layout_list, null); vh.tv = view.findViewById(R.id.listview_tv); view.setTag(vh); } else { vh = (ViewHolder) view.getTag(); } vh.tv.setText(data.get(position).getName()); return view; } class ViewHolder{ TextView tv; } }
MyAdapter
import android.content.Context; import android.content.Intent; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bwie.test.bean.RightBean; import com.bwie.test.bean.SouSuoBean; import com.bwie.test.mygou.R; import com.bwie.test.mygou.SouSuoActivity; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.viewholder>{ Context context; List<RightBean.DataBean> data; public MyAdapter(Context context, List<RightBean.DataBean> data) { this.context = context; this.data = data; } @Override public viewholder onCreateViewHolder(ViewGroup parent, int viewType) { viewholder viewholder = new viewholder(LayoutInflater.from(context) .inflate(R.layout.layout_item01, parent, false)); return viewholder; } @Override public void onBindViewHolder(viewholder holder, final int position) { holder.tv.setText(data.get(position).getName()); final List<RightBean.DataBean.ListBean> list = data.get(position).getList(); holder.recy2.setLayoutManager(new GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false)); ZhongAdapter zhongAdapter = new ZhongAdapter(list, context); holder.recy2.setAdapter(zhongAdapter); zhongAdapter.setOnItemClickListener(new ZhongAdapter.OnItemClickListener() { @Override public void onItemClick(int pos) { Intent intent = new Intent(context, SouSuoActivity.class); intent.putExtra("pscid",list.get(pos).getPscid()); context.startActivity(intent); } }); } @Override public int getItemCount() { return data.size(); } class viewholder extends RecyclerView.ViewHolder { RecyclerView recy2; TextView tv; public viewholder(View itemView) { super(itemView); recy2 = itemView.findViewById(R.id.recy2); tv = itemView.findViewById(R.id.item_tv); } } }
SouSuoAdapter
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bwie.test.bean.SouSuoBean; import com.bwie.test.mygou.R; import java.util.List; public class SouSuoAdapter extends RecyclerView.Adapter<SouSuoAdapter.viewholder>{ List<SouSuoBean.DataBean> data; Context context; private ZhongAdapter.OnItemClickListener onItemClickListener; public SouSuoAdapter(List<SouSuoBean.DataBean> data, Context context) { this.data = data; this.context = context; } @Override public viewholder onCreateViewHolder(ViewGroup parent, int viewType) { viewholder viewholder = new viewholder(LayoutInflater.from(context) .inflate(R.layout.layout_sousuo, parent, false)); return viewholder; } @Override public void onBindViewHolder(viewholder holder, final int position) { holder.t1.setText(data.get(position).getTitle()); holder.t2.setText("¥"+data.get(position).getPrice()); holder.t3.setText("¥"+data.get(position).getBargainPrice()); String[] split = data.get(position).getImages().split("\\|"); Glide.with(context).load(split[0]).into(holder.img); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(position); } }); } @Override public int getItemCount() { return data.size(); } class viewholder extends RecyclerView.ViewHolder { ImageView img; TextView t1,t2,t3; public viewholder(View itemView) { super(itemView); img=itemView.findViewById(R.id.ss_iv); t1=itemView.findViewById(R.id.ss_tv1); t2=itemView.findViewById(R.id.ss_tv2); t3=itemView.findViewById(R.id.ss_tv3); } } public void setOnItemClickListener(ZhongAdapter.OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public interface OnItemClickListener { void onItemClick(int pos); } }
ZhongAdapter
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bwie.test.bean.RightBean; import com.bwie.test.mygou.R; import java.util.List; public class ZhongAdapter extends RecyclerView.Adapter<ZhongAdapter.viehwolder>{ List<RightBean.DataBean.ListBean> list; Context context; private OnItemClickListener onItemClickListener; public ZhongAdapter(List<RightBean.DataBean.ListBean> list, Context context) { this.list = list; this.context = context; } @Override public viehwolder onCreateViewHolder(ViewGroup parent, int viewType) { viehwolder viehwolder = new viehwolder(LayoutInflater.from(context) .inflate(R.layout.layout_item02, parent,false)); return viehwolder; } @Override public void onBindViewHolder(viehwolder holder, final int position) { holder.tv.setText(list.get(position).getName()); Glide.with(context).load(list.get(position).getIcon()).into(holder.iv); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(position); } }); } @Override public int getItemCount() { return list.size(); } class viehwolder extends RecyclerView.ViewHolder { TextView tv; ImageView iv; public viehwolder(View itemView) { super(itemView); iv=itemView.findViewById(R.id.item2_iv); tv=itemView.findViewById(R.id.item2_tv); } } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public interface OnItemClickListener { void onItemClick(int pos); } }
model文件夹下LeftModel
import com.bwie.test.bean.LeftBean; import com.bwie.test.presenter.LeftIpresenter; import com.bwie.test.util.OkHttp; import com.google.gson.Gson; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class LeftModel { public void left(final LeftIpresenter leftIpresenter) { OkHttp.doGet("https://www.zhaoapi.cn/product/getCatagory", new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); Gson gson = new Gson(); LeftBean leftbean = gson.fromJson(string, LeftBean.class); leftIpresenter.OnSuccess(leftbean); } }); } }
RightModel
import com.bwie.test.bean.RightBean; import com.bwie.test.presenter.RightIpresenter; import com.bwie.test.util.OkHttp; import com.google.gson.Gson; import java.io.IOException; import java.util.HashMap; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class RightModel { public void getrightdata(int cid, final RightIpresenter rightIpresenter){ Map<String,String> map = new HashMap<>(); map.put("cid", String.valueOf(cid)); OkHttp.doPost("https://www.zhaoapi.cn/product/getProductCatagory", map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ String string = response.body().string(); Gson gson=new Gson(); RightBean rightbean = gson.fromJson(string, RightBean.class); rightIpresenter.OnrightSuccess(rightbean); } } }); } }
SouSuoMoudle
import android.util.Log; import com.bwie.test.bean.SouSuoBean; import com.bwie.test.presenter.SouSuoIpresenter; import com.bwie.test.util.OkHttp; import com.google.gson.Gson; import java.io.IOException; import java.util.HashMap; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class SouSuoMoudle { public void ssdata(int pscid, final SouSuoIpresenter ssIpresenter, int page) { Map<String,String> map=new HashMap<>(); map.put("pscid", String.valueOf(pscid)); map.put("page", String.valueOf(page)); Log.i("TAG---", "moudle层的参数 "+pscid+"///"+page); OkHttp.doPost("https://www.zhaoapi.cn/product/getProducts", map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ String string = response.body().string(); Log.i("TAG----", "展示数据的: "+string); Gson gson=new Gson(); SouSuoBean ssbean = gson.fromJson(string, SouSuoBean.class); ssIpresenter.OnSuccess(ssbean); } } }); } }
XiangQingMoudle
import com.bwie.test.bean.XiangQingBean; import com.bwie.test.presenter.XiangQingPresenter; import com.bwie.test.util.OkHttp; import com.google.gson.Gson; import java.io.IOException; import java.util.HashMap; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class XiangQingMoudle { public void getdata(int pid,final XiangQingPresenter presenter){ Map<String,String> map = new HashMap<>(); map.put("pid", String.valueOf(pid)); OkHttp.doPost("https://www.zhaoapi.cn/product/getProductDetail", map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ String string = response.body().string(); Gson gson=new Gson(); XiangQingBean xxBean = gson.fromJson(string, XiangQingBean.class); presenter.OnSuccess(xxBean); } } }); } }
presenter文件夹下LeftIpresenter
import com.bwie.test.bean.LeftBean; public interface LeftIpresenter { void OnSuccess(LeftBean leftbean); }
LeftPresenter
import com.bwie.test.bean.LeftBean; import com.bwie.test.model.LeftModel; import com.bwie.test.view.LeftView; public class LeftPresenter implements LeftIpresenter{ LeftModel left; LeftView leftView; public LeftPresenter( LeftView leftView) { this.leftView = leftView; left = new LeftModel(); } public void getleftdata(){ left.left(this); } @Override public void OnSuccess(LeftBean leftbean) { leftView.Onsuccess(leftbean); } }
RightIpresenter
import com.bwie.test.bean.RightBean; public interface RightIpresenter { void OnrightSuccess(RightBean rightBean); }
Rightpresenter
import com.bwie.test.bean.RightBean; import com.bwie.test.model.RightModel; import com.bwie.test.view.RightView; public class Rightpresenter implements RightIpresenter{ RightModel right; RightView rightView; public Rightpresenter(RightView rightView) { this.rightView = rightView; right = new RightModel(); } public void getrightdata(int cid) { right.getrightdata(cid,this); } @Override public void OnrightSuccess(RightBean rightBean) { rightView.RightSuccess(rightBean); } }
SouSuoIpresenter
import com.bwie.test.bean.SouSuoBean; public interface SouSuoIpresenter { void OnSuccess(SouSuoBean ssBean); }
SouSuoPresenter
import com.bwie.test.bean.SouSuoBean; import com.bwie.test.model.SouSuoMoudle; import com.bwie.test.view.SouSuoView; public class SouSuoPresenter implements SouSuoIpresenter{ SouSuoMoudle souSuoMoudle; SouSuoView ssView; public SouSuoPresenter(SouSuoView ssView) { this.ssView = ssView; souSuoMoudle = new SouSuoMoudle(); } public void getdata(int pscid,int page) { souSuoMoudle.ssdata(pscid, this,page); } @Override public void OnSuccess(SouSuoBean ssBean) { ssView.OnSuccess(ssBean); } }
XiangQingIpresenrer
import com.bwie.test.bean.XiangQingBean; public interface XiangQingIpresenrer { void OnSuccess(XiangQingBean xiangQingBean); }
XiangQingPresenter
import com.bwie.test.bean.XiangQingBean; import com.bwie.test.model.XiangQingMoudle; import com.bwie.test.view.XaingQingView; public class XiangQingPresenter implements XiangQingIpresenrer{ XiangQingMoudle xiangQingMoudle; XaingQingView xaingQingView; public XiangQingPresenter(XaingQingView xaingQingView) { this.xaingQingView = xaingQingView; xiangQingMoudle = new XiangQingMoudle(); } public void getdata(int pid){ xiangQingMoudle.getdata(pid,this); } @Override public void OnSuccess(XiangQingBean xiangQingBean) { xaingQingView.OnSuccess(xiangQingBean); } }
view文件夹下LeftView
import com.bwie.test.bean.LeftBean; public interface LeftView { void Onsuccess(LeftBean leftBean); }
RightView
import com.bwie.test.bean.RightBean; public interface RightView { void RightSuccess(RightBean rightBean); }
SouSuoView
import com.bwie.test.bean.SouSuoBean; public interface SouSuoView { void OnSuccess(SouSuoBean souSuoBean); }
XaingQingView
import com.bwie.test.bean.XiangQingBean; public interface XaingQingView { void OnSuccess(XiangQingBean xiangQingBean); }
ZoomImageView
import android.content.Context; import android.graphics.Matrix; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewTreeObserver; public class ZoomImageView extends android.support.v7.widget.AppCompatImageView implements ViewTreeObserver.OnGlobalLayoutListener, ScaleGestureDetector.OnScaleGestureListener, View.OnTouchListener { private boolean mOnce; /** * 初始化时缩放的值 */ private float mInitScale; /** * 双击放大值到达的值 */ private float mMidScale; /** * 放大的最大值 */ private float mMaxScale; private Matrix mScaleMatrix; /** * 捕获用户多指触控时缩放的比例 */ private ScaleGestureDetector mScaleGestureDetector; /** * 记录上一次多点触控的数量 */ private int mLastPointerCount; private float mLastX; private float mLastY; private int mTouchSlop; private boolean isCanDrag; private boolean isCheckLeftAndRight; private boolean isCheckTopAndBottom; private GestureDetector mGestureDetector; private boolean isAutoScale; public ZoomImageView(Context context) { this(context, null); } public ZoomImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ZoomImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // init mScaleMatrix = new Matrix(); setScaleType(ScaleType.MATRIX); setOnTouchListener(this); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); mScaleGestureDetector = new ScaleGestureDetector(context, this); mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { if (isAutoScale) { return true; } float x = e.getX(); float y = e.getY(); if (getScale() < mMidScale) { postDelayed(new AutoScaleRunnable(mMidScale, x, y), 16); isAutoScale = true; } else { postDelayed(new AutoScaleRunnable(mInitScale, x, y), 16); isAutoScale = true; } return true; } }); } /** * 自动放大与缩小 * @author zhangyan@lzt.com.cn */ private class AutoScaleRunnable implements Runnable { /** * 缩放的目标值 */ private float mTargetScale; // 缩放的中心点 private float x; private float y; private final float BIGGER = 1.07f; private final float SMALL = 0.93f; private float tmpScale; /** * @param mTargetScale * @param x * @param y */ public AutoScaleRunnable(float mTargetScale, float x, float y) { this.mTargetScale = mTargetScale; this.x = x; this.y = y; if (getScale() < mTargetScale) { tmpScale = BIGGER; } if (getScale() > mTargetScale) { tmpScale = SMALL; } } @Override public void run() { //进行缩放 mScaleMatrix.postScale(tmpScale, tmpScale, x, y); checkBorderAndCenterWhenScale(); setImageMatrix(mScaleMatrix); float currentScale = getScale(); if ((tmpScale >1.0f && currentScale <mTargetScale) ||(tmpScale<1.0f &¤tScale>mTargetScale)) { //这个方法是重新调用run()方法 postDelayed(this, 16); }else{ //设置为我们的目标值 float scale = mTargetScale/currentScale; mScaleMatrix.postScale(scale, scale, x, y); checkBorderAndCenterWhenScale(); setImageMatrix(mScaleMatrix); isAutoScale = false; } } } /** * 获取ImageView加载完成的图片 */ @Override public void onGlobalLayout() { if (!mOnce) { // 得到控件的宽和高 int width = getWidth(); int height = getHeight(); // 得到我们的图片,以及宽和高 Drawable drawable = getDrawable(); if (drawable == null) { return; } int dh = drawable.getIntrinsicHeight(); int dw = drawable.getIntrinsicWidth(); float scale = 0.5f; // 图片的宽度大于控件的宽度,图片的高度小于空间的高度,我们将其缩小 if (dw > width && dh < height) { scale = width * 1.0f / dw; } // 图片的宽度小于控件的宽度,图片的高度大于空间的高度,我们将其缩小 if (dh > height && dw < width) { scale = height * 1.0f / dh; } // 缩小值 if (dw > width && dh > height) { scale = Math.min(width * 1.0f / dw, height * 1.0f / dh); } // 放大值 if (dw < width && dh < height) { scale = Math.min(width * 1.0f / dw, height * 1.0f / dh); } /** * 得到了初始化时缩放的比例 */ mInitScale = scale; mMaxScale = mInitScale * 4; mMidScale = mInitScale * 2; // 将图片移动至控件的中间 int dx = getWidth() / 2 - dw / 2; int dy = getHeight() / 2 - dh / 2; mScaleMatrix.postTranslate(dx, dy); mScaleMatrix.postScale(mInitScale, mInitScale, width / 2, height / 2); setImageMatrix(mScaleMatrix); mOnce = true; } } /** * 注册OnGlobalLayoutListener这个接口 */ @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); getViewTreeObserver().addOnGlobalLayoutListener(this); } /** * 取消OnGlobalLayoutListener这个接口 */ @SuppressWarnings("deprecation") @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeGlobalOnLayoutListener(this); } /** * 获取当前图片的缩放值 * * @return */ public float getScale() { float[] values = new float[9]; mScaleMatrix.getValues(values); return values[Matrix.MSCALE_X]; } // 缩放区间时initScale maxScale @Override public boolean onScale(ScaleGestureDetector detector) { float scale = getScale(); float scaleFactor = detector.getScaleFactor(); if (getDrawable() == null) { return true; } // 缩放范围的控制 if ((scale < mMaxScale && scaleFactor > 1.0f) || (scale > mInitScale && scaleFactor < 1.0f)) { if (scale * scaleFactor < mInitScale) { scaleFactor = mInitScale / scale; } if (scale * scaleFactor > mMaxScale) { scale = mMaxScale / scale; } // 缩放 mScaleMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); checkBorderAndCenterWhenScale(); setImageMatrix(mScaleMatrix); } return true; } /** * 获得图片放大缩小以后的宽和高,以及left,right,top,bottom * * @return */ private RectF getMatrixRectF() { Matrix matrix = mScaleMatrix; RectF rectF = new RectF(); Drawable d = getDrawable(); if (d != null) { rectF.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); matrix.mapRect(rectF); } return rectF; } /** * 在缩放的时候进行边界以及我们的位置的控制 */ private void checkBorderAndCenterWhenScale() { RectF rectF = getMatrixRectF(); float deltaX = 0; float deltaY = 0; int width = getWidth(); int height = getHeight(); // 缩放时进行边界检测,防止出现白边 if (rectF.width() >= width) { if (rectF.left > 0) { deltaX = -rectF.left; } if (rectF.right < width) { deltaX = width - rectF.right; } } if (rectF.height() >= height) { if (rectF.top > 0) { deltaY = -rectF.top; } if (rectF.bottom < height) { deltaY = height - rectF.bottom; } } /** * 如果宽度或高度小于空间的宽或者高,则让其居中 */ if (rectF.width() < width) { deltaX = width / 2f - rectF.right + rectF.width() / 2f; } if (rectF.height() < height) { deltaY = height / 2f - rectF.bottom + rectF.height() / 2f; } mScaleMatrix.postTranslate(deltaX, deltaY); } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector detector) { } @Override public boolean onTouch(View v, MotionEvent event) { if (mGestureDetector.onTouchEvent(event)) { return true; } mScaleGestureDetector.onTouchEvent(event); float x = 0; float y = 0; // 拿到多点触控的数量 int pointerCount = event.getPointerCount(); for (int i = 0; i < pointerCount; i++) { x += event.getX(i); y += event.getY(i); } x /= pointerCount; y /= pointerCount; if (mLastPointerCount != pointerCount) { isCanDrag = false; mLastX = x; mLastY = y; } mLastPointerCount = pointerCount; RectF rectF = getMatrixRectF(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (rectF.width()>getWidth() +0.01|| rectF.height()>getHeight()+0.01) { if(getParent() instanceof ViewPager) getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_MOVE: if (rectF.width()>getWidth()+0.01 || rectF.height()>getHeight()+0.01) { if(getParent() instanceof ViewPager){ Log.e("---","----+++"); getParent().requestDisallowInterceptTouchEvent(true); } } float dx = x - mLastX; float dy = y - mLastY; if (!isCanDrag) { isCanDrag = isMoveAction(dx, dy); } if (isCanDrag) { if (getDrawable() != null) { isCheckLeftAndRight = isCheckTopAndBottom = true; // 如果宽度小于控件宽度,不允许横向移动 if (rectF.width() < getWidth()) { isCheckLeftAndRight = false; dx = 0; } // 如果高度小于控件高度,不允许纵向移动 if (rectF.height() < getHeight()) { isCheckTopAndBottom = false; dy = 0; } mScaleMatrix.postTranslate(dx, dy); checkBorderWhenTranslate(); setImageMatrix(mScaleMatrix); } } mLastX = x; mLastY = y; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mLastPointerCount = 0; break; default: break; } return true; } /** * 当移动时进行边界检查 */ private void checkBorderWhenTranslate() { RectF rectF = getMatrixRectF(); float deltaX = 0; float deltaY = 0; int width = getWidth(); int heigth = getHeight(); if (rectF.top > 0 && isCheckTopAndBottom) { deltaY = -rectF.top; } if (rectF.bottom < heigth && isCheckTopAndBottom) { deltaY = heigth - rectF.bottom; } if (rectF.left > 0 && isCheckLeftAndRight) { deltaX = -rectF.left; } if (rectF.right < width && isCheckLeftAndRight) { deltaX = width - rectF.right; } mScaleMatrix.postTranslate(deltaX, deltaY); } /** * 判断是否是move * * @param dx * @param dy * @return */ private boolean isMoveAction(float dx, float dy) { return Math.sqrt(dx * dx + dy * dy) > mTouchSlop; } }
util文件夹下APIUtils
public class APIUtils { public static String feileiurl="https://www.zhaoapi.cn/product/getCatagory"; public static String shopurl="https://www.zhaoapi.cn/product/getProductCatagory"; public static String zileiurl="https://www.zhaoapi.cn/product/getProducts"; public static String Xiangqingurl="https://www.zhaoapi.cn/product/getProductDetail"; public static String ShopCarurl="https://www.zhaoapi.cn/product/addCart"; }
OkHttp
import android.os.Environment; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; public class OkHttp { private static OkHttpClient okHttpClient = null; private OkHttp() { } public static OkHttpClient getInstance() { if (okHttpClient == null) { //加同步安全 synchronized (OkHttp.class) { if (okHttpClient == null) { //okhttp可以缓存数据....指定缓存路径 File sdcache = new File(Environment.getExternalStorageDirectory(), "cache"); //指定缓存大小 int cacheSize = 10 * 1024 * 1024; okHttpClient = new OkHttpClient.Builder()//构建器 .connectTimeout(15, TimeUnit.SECONDS)//连接超时 .writeTimeout(20, TimeUnit.SECONDS)//写入超时 .readTimeout(20, TimeUnit.SECONDS)//读取超时 .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize)) .build(); } } } return okHttpClient; } public static void doGet(String oldUrl, Callback callback) { //要添加的公共参数...map Map<String,String> map = new HashMap<>(); map.put("source","android"); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(oldUrl); if (oldUrl.contains("?")){ if (oldUrl.indexOf("?") == oldUrl.length()-1){ }else { stringBuilder.append("&"); } }else { stringBuilder.append("?"); } for (Map.Entry<String,String> entry: map.entrySet()) { //拼接 stringBuilder.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } if (stringBuilder.indexOf("&") != -1){ stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&")); } String newUrl = stringBuilder.toString(); OkHttpClient okHttpClient = getInstance(); Request request = new Request.Builder().url(newUrl).build(); Call call = okHttpClient.newCall(request); call.enqueue(callback); } public static void doPost(String url, Map<String, String> params, Callback callback) { Map<String,String> map = new HashMap<>(); map.put("source","android"); OkHttpClient okHttpClient = getInstance(); FormBody.Builder builder = new FormBody.Builder(); for (String key : params.keySet()) { builder.add(key, params.get(key)); } for (String key : map.keySet()) { builder.add(key, map.get(key)); } Request request = new Request.Builder().url(url).post(builder.build()).build(); Call call = okHttpClient.newCall(request); call.enqueue(callback); } }
使用的依赖
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
compile 'com.jcodecraeer:xrecyclerview:1.5.2' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.squareup.okhttp3:okhttp:3.9.1' compile 'com.squareup.okio:okio:1.13.0' compile 'com.google.code.gson:gson:2.6.2'
bean文件夹下LeftBean
import java.util.List; public class LeftBean { private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private int cid; private String createtime; private String icon; private int ishome; private String name; public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public int getIshome() { return ishome; } public void setIshome(int ishome) { this.ishome = ishome; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }
RightBean
import java.util.List; public class RightBean { private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String cid; private String name; private String pcid; private List<ListBean> list; public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPcid() { return pcid; } public void setPcid(String pcid) { this.pcid = pcid; } public List<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public static class ListBean { private String icon; private String name; private int pcid; private int pscid; public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPcid() { return pcid; } public void setPcid(int pcid) { this.pcid = pcid; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } } } }
SouSuoBean
import java.util.List; public class SouSuoBean { private String msg; private String code; private String page; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getItemtype() { return itemtype; } public void setItemtype(int itemtype) { this.itemtype = itemtype; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }
XiangQingBean
public class XiangQingBean { private String msg; private SellerBean seller; private String code; private DataBean data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public SellerBean getSeller() { return seller; } public void setSeller(SellerBean seller) { this.seller = seller; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public static class SellerBean { private String description; private String icon; private String name; private int productNums; private double score; private int sellerid; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getProductNums() { return productNums; } public void setProductNums(int productNums) { this.productNums = productNums; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } } public static class DataBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getItemtype() { return itemtype; } public void setItemtype(int itemtype) { this.itemtype = itemtype; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }