首先先写Mvp 在里面创建俩个包一个persenter 一个view
persenter里面 BsaeFaremnet BsaeActcity
View 下 创建一个类名 在一个实现类名
=============================================Mvp=类名
public interface Delegate { //初始化方法 void initData(); //初始化布局 void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle); //创建View,获取View View rootView(); //获取上下文 void getContext(Context context); }
=================================实现类名
public abstract class AbnerMing implements Delegate { private View rootView; @Override public void initData() { } private SparseArray<View> views = new SparseArray<>(); public <T extends View> T get(int id) { T view = (T) views.get(id); if (view == null) { view = rootView().findViewById(id); views.put(id, view); } return view; } public void setClick(View.OnClickListener listener, int... ids) { if (ids == null) { return; } for (int id : ids) { get(id).setOnClickListener(listener); } } @Override public void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) { rootView = inflater.inflate(getLayoutId(), viewGroup, false); } @Override public View rootView() { return rootView; } private Context context; @Override public void getContext(Context context) { this.context = context; } public abstract int getLayoutId(); }
=================================persenter=Freament
public abstract class BeseFragmentPresenter<T extends AbnerMing> extends Fragment { private Delegate delegate; //获取每一个Fragment对应的presenter public abstract Class<T> getClassDelegate(); public BeseFragmentPresenter(){ try { delegate= getClassDelegate().newInstance(); } catch (java.lang.InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { delegate.create(inflater, container, savedInstanceState); return delegate.rootView(); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { delegate = getClassDelegate().newInstance(); } catch (java.lang.InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public void initData() { } }
======================================persenterAcivcty
public abstract class BsaeActivityPresenter<T extends AbnerMing> extends AppCompatActivity { public T delagate; public abstract Class<T> getClassDelegate(); public BsaeActivityPresenter() { try { delagate = getClassDelegate().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); delagate.create(getLayoutInflater(), null, savedInstanceState); setContentView(delagate.rootView()); delagate.getContext(this); delagate.initData(); } }
=======================================MainActivity
public class MainActivity extends BsaeActivityPresenter<MainActivityPresenter> { @Override public Class<MainActivityPresenter> getClassDelegate() { return MainActivityPresenter.class; } }
===========================================MainActivityPresenter
public class MainActivityPresenter extends AbnerMing implements View.OnClickListener { private String url = "http://ftp6252741.host709.zhujiwu.me/goods/goods_all.txt"; private XListView xlistView; private ListView listView; private ListBean listBean; private LeftAdapter leftAdapter; private RigthAdapter rigthAdapter; private RigrthtopAdter rigrthtopAdter; public Reji reji; @Override public int getLayoutId() { return R.layout.activity_main; } @Override public void initData() { super.initData(); listView = (ListView) get(R.id.listview); xlistView = (XListView) get(R.id.xlistview); setClick(this, R.id.goods_txt); leftAdapter = new LeftAdapter(context); listView.setAdapter(leftAdapter); rigthAdapter = new RigthAdapter(context); xlistView.setAdapter(rigthAdapter); xlistView.setPullLoadEnable(true); xlistView.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { doHttpRigth(url); } @Override public void onLoadMore() { xlistView.stopLoadMore(); } }); doHttpLeft(); doHttpRigth(url); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { url = listBean.getDatas().get(i).getLink(); doHttpRigth(url); } }); View view = View.inflate(context, R.layout.rigth_top, null); GridView grid = (GridView) view.findViewById(R.id.grid_view); rigrthtopAdter = new RigrthtopAdter(context); grid.setAdapter(rigrthtopAdter); xlistView.addHeaderView(view); } public Context context; @Override public void getContext(Context context) { this.context = context; } private void doHttpRigth(String url) { new Hepler().get(url).result(new Hepler.HttpListener() { @Override public void success(String data) { Rigth rigth = new Gson().fromJson(data, Rigth.class); rigthAdapter.setList(rigth.getGooslist()); rigrthtopAdter.setList(rigth.getDatas()); rigthAdapter.notifyDataSetChanged(); rigrthtopAdter.notifyDataSetChanged(); xlistView.stopRefresh(); } }); } private void doHttpLeft() { String url = "http://ftp6252741.host709.zhujiwu.me/goods/goods_list.txt"; new Hepler().get(url).result(new Hepler.HttpListener() { @Override public void success(String data) { listBean = new Gson().fromJson(data, ListBean.class); Log.i("aaa", listBean.getDatas().size() + ""); leftAdapter.setList(listBean.getDatas()); } }); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.goods_txt://跳转到搜索商品页面 context.startActivity(new Intent(context, GoodsActivity.class)); break; } } }
======================================布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".activity.MainActivity"> <TextView android:id="@+id/goods_txt" android:layout_width="match_parent" android:layout_height="50dp" android:layout_margin="5dp" android:background="@drawable/bian" android:gravity="center_vertical" android:hint="请输入商品名称" android:paddingLeft="10dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/goods_txt" android:layout_marginTop="5dp" android:weightSum="1"> <ListView android:id="@+id/listview" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.2" android:background="#ffffff"></ListView> <com.example.xlistviewlib.XListView android:id="@+id/xlistview" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginLeft="5dp" android:layout_weight="0.8" android:background="#ffffff" /> </LinearLayout> </RelativeLayout>
====================================leftAdater
public class LeftAdapter extends BaseAdapter { private List<ListBean.DatasBean> objects = new ArrayList<ListBean.DatasBean>(); private Context context; public LeftAdapter(Context context) { this.context = context; } @Override public int getCount() { return objects.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = View.inflate(context, R.layout.left, null); viewHolder.goodsName = convertView.findViewById(R.id.goods_name); viewHolder.layoutChild = convertView.findViewById(R.id.layout_child); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } ListBean.DatasBean bean = objects.get(position); viewHolder.goodsName.setText(bean.getName()); List<ListBean.DatasBean.ArrBean> list = bean.getArr(); if (list.size() > 0) { viewHolder.layoutChild.setVisibility(View.VISIBLE); viewHolder.layoutChild.removeAllViews(); for (int a = 0; a < list.size(); a++) { ListBean.DatasBean.ArrBean arrBean = list.get(a); View view = View.inflate(context, R.layout.left_two, null); TextView textView = view.findViewById(R.id.goods_name_two); textView.setText(arrBean.getName()); viewHolder.layoutChild.addView(view); } } else { viewHolder.layoutChild.setVisibility(View.GONE); } return convertView; } public void setList(List<ListBean.DatasBean> list) { objects = list; notifyDataSetChanged(); } protected class ViewHolder { private TextView goodsName; private LinearLayout layoutChild; } }
=====================================rigthAdaterr
public class RigthAdapter extends BaseAdapter { private List<Rigth.GooslistBean> objects = new ArrayList<Rigth.GooslistBean>(); private Context context; public RigthAdapter(Context context) { this.context = context; } public void setList(List<Rigth.GooslistBean> list) { objects = list; notifyDataSetChanged(); } @Override public int getCount() { return objects.size(); } @Override public Object getItem(int position) { return objects.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder mViewHolder; if (convertView == null) { convertView = View.inflate(context, R.layout.rigth, null); mViewHolder = new ViewHolder(); mViewHolder.goodsPic = convertView.findViewById(R.id.goods_pic); mViewHolder.goodsTitle = convertView.findViewById(R.id.goods_title); mViewHolder.goodsDesc = convertView.findViewById(R.id.goods_desc); convertView.setTag(mViewHolder); } else { mViewHolder = (ViewHolder) convertView.getTag(); } Rigth.GooslistBean bean = objects.get(position); mViewHolder.goodsTitle.setText(bean.getName()); mViewHolder.goodsDesc.setText(bean.getDesc()); Picasso.with(context).load(bean.getPic()).fit().into(mViewHolder.goodsPic); return convertView; } protected class ViewHolder { private ImageView goodsPic; private TextView goodsTitle; private TextView goodsDesc; } }
===================================rigthtop=Adater
public class RigrthtopAdter extends BaseAdapter{ private List<Rigth.DatasBean> objects = new ArrayList<Rigth.DatasBean>(); private Context context; public RigrthtopAdter(Context context) { this.context = context; } @Override public int getCount() { return objects.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder mViewHolder; if (convertView == null) { convertView = View.inflate(context,R.layout.righth_top1, null); mViewHolder=new ViewHolder(); mViewHolder.imageTop=convertView.findViewById(R.id.image_top); convertView.setTag(mViewHolder); }else{ mViewHolder= (ViewHolder) convertView.getTag(); } Picasso.with(context).load(objects.get(position).getPic()).fit().into(mViewHolder.imageTop); return convertView; } public void setList(List<Rigth.DatasBean> list) { objects = list; notifyDataSetChanged(); } protected class ViewHolder { ImageView imageTop; } }
==================================GoodAcity
public class GoodsActivity extends BsaeActivityPresenter<GoodsActivityPresenter> { @Override public Class<GoodsActivityPresenter> getClassDelegate() { return GoodsActivityPresenter.class; } }
============================GoodAcyity
public class GoodsActivityPresenter extends AbnerMing implements View.OnClickListener {
private GoodView mGoodsView; private GoodView mGoodsViewB; private EditText mEditText; @Override public int getLayoutId() { return R.layout.goog; } @Override public void initData() { super.initData(); mGoodsView = (GoodView) get(R.id.goods_view_top); mGoodsViewB = (GoodView) get(R.id.goods_view_bottom); mEditText = (EditText) get(R.id.goods_txt); doHttpHot(); setClick(this, R.id.seach_msg); } List<Lishi.DatasBean> list = new ArrayList<>(); private void doHttpHot() { String url="http://ftp6252741.host709.zhujiwu.me/goods/goods_hot.txt"; new Hepler().get(url).result(new Hepler.HttpListener() { @Override public void success(String data) { Lishi lishi = new Gson().fromJson(data, Lishi.class); List<Lishi.DatasBean> datas = lishi.getDatas(); mGoodsView.setList(datas); } }); } public Context context; @Override public void getContext(Context context) { this.context = context; } @Override public void onClick(View view) { switch (view.getId()) { case R.id.seach_msg://搜索 String messs = mEditText.getText().toString().trim(); if (TextUtils.isEmpty(messs)) { Toast.makeText(context, "请输入要搜索的商品", Toast.LENGTH_SHORT).show(); return; } Lishi.DatasBean bean = new Lishi.DatasBean(); bean.setName(messs); list.add(bean); mGoodsViewB.setList(list); break; } } } =====================================GoodView流失布局 public class GoodView extends RelativeLayout { private LinearLayout mLyoutV; private View view; public GoodView(Context context) { super(context); init(context); } public GoodView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public GoodView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private Context context; private void init(Context context) { this.context = context; //创建垂直的LinearLayout view = View.inflate(context, R.layout.good_v, null); mLyoutV = (LinearLayout) view.findViewById(R.id.lyout_v); //创建水平的 addView(view); } public void setList(List<Lishi.DatasBean> list) { mLyoutV.removeAllViews(); //创建水平layout LinearLayout view_h = (LinearLayout) View.inflate(context, R.layout.good_h, null); mLyoutV.addView(view_h); int len = 0; view_h.removeAllViews(); for (int a = 0; a < list.size(); a++) { String msg = list.get(a).getName(); len += msg.length(); if (len > 22) { view_h = (LinearLayout) View.inflate(context, R.layout.good_h, null); mLyoutV.addView(view_h); len = 0; } //创建展示内容的layout View viewContent = View.inflate(context, R.layout.good_center, null); TextView textView = (TextView) viewContent.findViewById(R.id.tv_content); textView.setText(msg); view_h.addView(viewContent); //设置parmars LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) viewContent.getLayoutParams(); params.weight = 1; params.leftMargin = 5; params.topMargin = 5; viewContent.setLayoutParams(params); } } }
=================================流失布局
<?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:background="#e8e8e8" android:orientation="vertical" tools:context=".activity.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:weightSum="1" > <EditText android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="0.8" android:layout_margin="5dp" android:hint="请输入商品名称" android:background="@drawable/bian" android:paddingLeft="10dp" android:gravity="center_vertical" android:id="@+id/goods_txt" /> <TextView android:layout_width="0dp" android:layout_weight="0.2" android:layout_height="wrap_content" android:text="搜索" android:background="@drawable/cen" android:paddingTop="10dp" android:paddingBottom="10dp" android:gravity="center_horizontal" android:layout_marginRight="5dp" android:id="@+id/seach_msg" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="热门搜索" android:textColor="#d43c3c" android:layout_marginLeft="8dp" android:layout_marginTop="5dp" /> <zhoukao1.bwie.com.mvpapplication.GoodView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/goods_view_top" android:layout_marginTop="8dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="历史搜索" android:textColor="#d43c3c" android:layout_marginLeft="8dp" android:layout_marginTop="5dp" /> <zhoukao1.bwie.com.mvpapplication.GoodView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/goods_view_bottom" android:layout_marginTop="8dp" /> </LinearLayout>
==================-v
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="wrap_content" tools:context=".activity.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/lyout_v" /> </RelativeLayout>
================================h
<?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="wrap_content" android:orientation="horizontal" tools:context=".activity.MainActivity"> </LinearLayout>
=====================================center
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="wrap_content" android:background="@drawable/cen" android:paddingTop="10dp" android:paddingBottom="10dp" tools:context=".activity.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_content" android:layout_centerInParent="true" /> </RelativeLayout>
=======================================画圆
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="#ffffff"></stroke> <solid android:color="#ffffff" /> <corners android:radius="10dp"></corners> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:color="#999999" android:width="2dp" /> <solid android:color="#ffffff"/> <corners android:radius="10dp" /> </shape>
=========================================封装Bean
package zhoukao1.bwie.com.mvpapplication.Bean; import java.util.List; public class Reji { private List<DatasBean> datas; public List<DatasBean> getDatas() { return datas; } public void setDatas(List<DatasBean> datas) { this.datas = datas; } public static class DatasBean implements IModel{ /** * name : 女装 * arr : [{"name":"女裤子"},{"name":"女褂子"},{"name":"女鞋子"}] */ private String name; private List<ArrBean> arr; private String link; public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<ArrBean> getArr() { return arr; } public void setArr(List<ArrBean> arr) { this.arr = arr; } public static class ArrBean implements IModel{ /** * name : 女裤子 */ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } } }
=======================================Lomdel
package zhoukao1.bwie.com.mvpapplication.Bean; public interface IModel { }