BaseActivity 抽取Activity
public abstract class BaseActivity
extends AppCompatActivity implements IContract.IView {
public P p;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initLayout());
p = initPresenter();
if (p!=null){
p.onAttach(this);
}
initView();
initData();
}
protected abstract P initPresenter();
protected abstract void initData();
protected abstract void initView();
protected abstract int initLayout();
@Override
protected void onDestroy() {
super.onDestroy();
if (p!=null){
p.onunAttach();
p = null;
}
}
}
BaseP 抽取P
public abstract class BasePresenter implements IContract.IPresenter {
public V v;
public void onAttach(V v){
this.v = v;
}
public void onunAttach(){
if (v!=null){
v=null;
}
}
}
BaseFragment 抽取F
public abstract class BaseFragment extends Fragment implements IContract.IView {
public F f;
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(initLayout(), container, false);
return view;
}
@Override
public void onStart() {
super.onStart();
f = initFragment();
f.Attach(this);
initView(view);
initData();
}
protected abstract void initView(View view);
protected abstract void initData();
protected abstract F initFragment();
protected abstract int initLayout();
@Override
public void onDestroy() {
super.onDestroy();
if (f!=null){
f.Uttach();
f=null;
}
}
BasePresenterFragment
public abstract class BasePresenterFragment implements IContract.IPresenter {
public V v;
//绑定方法
public void Attach(V v){
this.v=v;
}
//解绑方法
public void Uttach(){
if (v!=null){
v=null;
}
}
}
MyApp
public class MyApp extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context =this;
}
}
ApiService## 标题
public interface ApiService {
@GET
Observable getInfoNoParams(@Url String url);
@GET
Observable getInfoParams(@Url String url, @QueryMap Map<String,Object> map);
@POST
Observable postInfoParams(@Url String url,@QueryMap Map<String,Object> map);
}
MyUrls
public interface MyUrls {
String BASEURL = “http://172.17.8.100/small/”;
//分类
String SHOPPING_ITEM = “commodity/v1/findCategory”;
//登录
String LOGER= “user/v1/login”;
}
*
IContract
public interface IContract {
public interface MyCallBack{
void onSuccess(T t);
void onError(String err);
}
interface IModel{
void getInfo(String url, Class cls, MyCallBack myCallBack);
void getInfoParams(String url,Class cls,Map map,MyCallBack callBack);
void postInfoParams(String url,Class cls,Map map,MyCallBack myCallBack);
}
interface IView{
void onSuccess(T t);
void onError(String error);
}
interface IPresenter{
void getInfo(String url,Class cls);
void getInfoParams(String url,Class cls,Map map);
void postInfoParams(String url,Class cls,Map map);
}
}
网络哟工具
public class MyUtil {
private final ApiService apiService;
private MyUtil(){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.addInterceptor(new Interceptor() {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
SharedPreferences lzw = MyApp.context.getSharedPreferences("lzw", Context.MODE_PRIVATE);
String userId = lzw.getString("userId", "");
String sessionId = lzw.getString("sessionId", "");
if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(sessionId)) {
return chain.proceed(chain.request());
} else {
Request request = chain.request().newBuilder()
.addHeader("userId", "")
.addHeader("sessionId", "")
.build();
return chain.proceed(request);
}
}
}).build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MyUrls.BASEURL)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
apiService = retrofit.create(ApiService.class);
}
private static class UtilHodler{
private static MyUtil myUtil = new MyUtil();
}
public static MyUtil getInstance() {
return UtilHodler.myUtil;
}
public void getInfo(String url, final Class cls, final MyCallBack myCallBack){
apiService.getInfoNoParams(url).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
Gson gson = new Gson();
try {
Object o = gson.fromJson(responseBody.string(), cls);
if (myCallBack!=null){
myCallBack.onSuccess(o);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
myCallBack.onError(e.getMessage());
}
@Override
public void onComplete() {
}
});
}
public void getInfoParams(String url, final Class cls, Map<String,Object> map, final MyCallBack myCallBack){
apiService.postInfoParams(url,map).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
Gson gson = new Gson();
try {
Object object = gson.fromJson(responseBody.string(), cls);
if (myCallBack!=null){
myCallBack.onSuccess(object);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void postInfoParams(String url, final Class cls, Map map, final MyCallBack myCallBack){
apiService.postInfoParams(url,map).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
Gson gson = new Gson();
try {
Object object = gson.fromJson(responseBody.string(), cls);
if (myCallBack!=null){
myCallBack.onSuccess(object);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public interface MyCallBack<T>{
void onSuccess(T t);
void onError(String err);
}
}
MyModel
public class MyModel implements IContract.IModel {
@Override
public void getInfo(String url, Class cls, final IContract.MyCallBack myCallBack) {
MyUtil.getInstance().getInfo(url, cls, new MyUtil.MyCallBack() {
@Override
public void onSuccess(Object o) {
myCallBack.onSuccess(o);
}
@Override
public void onError(String err) {
myCallBack.onError(err);
}
});
}
@Override
public void getInfoParams(String url, Class cls, Map map, final IContract.MyCallBack myCallBack) {
MyUtil.getInstance().getInfoParams(url, cls, map, new MyUtil.MyCallBack() {
@Override
public void onSuccess(Object o) {
myCallBack.onSuccess(o);
}
@Override
public void onError(String err) {
myCallBack.onError(err);
}
});
}
@Override
public void postInfoParams(String url, Class cls, Map map, final IContract.MyCallBack myCallBack) {
MyUtil.getInstance().postInfoParams(url, cls, map, new MyUtil.MyCallBack() {
@Override
public void onSuccess(Object o) {
myCallBack.onSuccess(o);
}
@Override
public void onError(String err) {
myCallBack.onError(err);
}
});
}
}
MyPresenter
public class MyPresenter extends BasePresenter {
MyModel myModel = new MyModel();
@Override
public void getInfo(String url, Class cls) {
myModel.getInfo(url, cls, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
@Override
public void getInfoParams(String url, Class cls, Map map) {
myModel.getInfoParams(url, cls, map, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
@Override
public void postInfoParams(String url, Class cls, Map map) {
myModel.postInfoParams(url, cls, map, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
}
MyPresenterFragment
public class MyPresenterFragment extends BasePresenterFragment {
MyModel myModel = new MyModel();
@Override
public void getInfo(String url, Class cls) {
myModel.getInfo(url, cls, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
@Override
public void getInfoParams(String url, Class cls, Map map) {
myModel.getInfoParams(url, cls, map, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
@Override
public void postInfoParams(String url, Class cls, Map map) {
myModel.postInfoParams(url, cls, map, new IContract.MyCallBack() {
@Override
public void onSuccess(Object o) {
v.onSuccess(o);
}
@Override
public void onError(String err) {
v.onError(err);
}
});
}
}
Main
public class MainActivity extends BaseActivity {
private MyPresenter myPresenter;
private ViewPager view_pager;
private TabLayout tab_layout;
List<String> slist = new ArrayList<>();
List<Fragment> flist = new ArrayList<>();
private ShouFragment shouFragment;
private DengFragment dengFragment;
@Override
protected BasePresenter initPresenter() {
myPresenter = new MyPresenter();
return myPresenter;
}
@Override
protected void initData() {
slist.add("首页");
slist.add("登录");
shouFragment = new ShouFragment();
dengFragment = new DengFragment();
flist.add(shouFragment);
flist.add(dengFragment);
view_pager.setAdapter(new FragmentAdapter(getSupportFragmentManager(),slist,flist));
tab_layout.setupWithViewPager(view_pager);
}
@Override
protected void initView() {
view_pager = findViewById(R.id.view_pager);
tab_layout = findViewById(R.id.tab_layout);
}
@Override
protected int initLayout() {
return R.layout.activity_main;
}
@Override
public void onSuccess(Object o) {
}
@Override
public void onError(String error) {
}
}
FragmentAdapter
public class FragmentAdapter extends FragmentPagerAdapter {
List slist;
List flist;
public FragmentAdapter(FragmentManager fm, List<String> slist, List<Fragment> flist) {
super(fm);
this.slist = slist;
this.flist = flist;
}
@Override
public Fragment getItem(int i) {
return flist.get(i);
}
@Override
public int getCount() {
return flist.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return slist.get(position);
}
}
首页展示Fragment
public class ShouFragment extends BaseFragment {
private RecyclerView one_Ji_Recy;
private RecyclerView Two_Ji_Recy;
private MyPresenterFragment myPresenterFragment;
List<MyBean.ResultBean> mOneList= new ArrayList<>();
List<MyBean.ResultBean.SecondCategoryVoBean> mTwoList = new ArrayList<>();
private MyAdapter myAdapter;
private Twoadapter twoadapter;
@Override
protected void initView(View view) {
one_Ji_Recy = view.findViewById(R.id.one_Ji_Recy);
one_Ji_Recy.setLayoutManager(new LinearLayoutManager(getContext()));
Two_Ji_Recy = view.findViewById(R.id.Two_Ji_Recy);
Two_Ji_Recy.setLayoutManager(new GridLayoutManager(getContext(),2));
}
@Override
protected void initData() {
myPresenterFragment.getInfo(MyUrls.SHOPPING_ITEM, MyBean.class);
myAdapter = new MyAdapter(mOneList, getContext());
one_Ji_Recy.setAdapter(myAdapter);
twoadapter = new Twoadapter(mTwoList, getContext());
Two_Ji_Recy.setAdapter(twoadapter);
myAdapter.setItemClick(new MyAdapter.ItemClick() {
@Override
public void setIndex(int position) {
myAdapter.setColorPosition(position);
mTwoList.clear();
mTwoList.addAll(mOneList.get(position).getSecondCategoryVo());
twoadapter.notifyDataSetChanged();
}
});
}
@Override
protected BasePresenterFragment initFragment() {
myPresenterFragment = new MyPresenterFragment();
return myPresenterFragment;
}
@Override
protected int initLayout() {
return R.layout.shou_layout;
}
@Override
public void onSuccess(Object o) {
if (o instanceof MyBean){
mOneList.addAll(((MyBean) o).getResult());
myAdapter.notifyDataSetChanged();
mTwoList.addAll(mOneList.get(0).getSecondCategoryVo());
twoadapter.notifyDataSetChanged();
}
}
@Override
public void onError(String error) {
}
}
oneAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Hodel> {
List<MyBean.ResultBean> mOneList;
Context mContext;
int mColorPosition = 0;
public MyAdapter(List<MyBean.ResultBean> mOneList, Context mContext) {
this.mOneList = mOneList;
this.mContext = mContext;
}
@NonNull
@Override
public Hodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(mContext,R.layout.item_one_ji,null);
Hodel hodel = new Hodel(view);
return hodel;
}
@Override
public void onBindViewHolder(@NonNull Hodel hodel, final int i) {
hodel.mTv.setText(mOneList.get(i).getName()+"");
if (mColorPosition==i){
hodel.mTv.setTextColor(Color.RED);
}else {
hodel.mTv.setTextColor(Color.BLACK);
}
hodel.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (click!=null){
click.setIndex(i);
}
}
});
}
@Override
public int getItemCount() {
return mOneList.size();
}
class Hodel extends RecyclerView.ViewHolder {
private TextView mTv;
public Hodel(@NonNull View itemView) {
super(itemView);
mTv = itemView.findViewById(R.id.One_Text);
}
}
public interface ItemClick{
void setIndex(int position);
}
private ItemClick click;
public void setItemClick(ItemClick click){
this.click = click;
}
public void setColorPosition(int position){
this.mColorPosition = position;
notifyDataSetChanged();
}
}
TwoAdapter
public class Twoadapter extends RecyclerView.Adapter<Twoadapter.Holder> {
List<MyBean.ResultBean.SecondCategoryVoBean> TwoList;
Context mContext;
public Twoadapter(List<MyBean.ResultBean.SecondCategoryVoBean> twoList, Context mContext) {
TwoList = twoList;
this.mContext = mContext;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(mContext,R.layout.item_two_ji,null);
Holder holder = new Holder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int i) {
holder.mTv.setText(TwoList.get(i).getName()+"");
holder.mTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public int getItemCount() {
return TwoList.size();
}
class Holder extends RecyclerView.ViewHolder {
TextView mTv;
public Holder(@NonNull View itemView) {
super(itemView);
mTv = itemView.findViewById(R.id.Two_Text);
}
}
}
登录Fragment
public class DengFragment extends BaseFragment {
@BindView(R.id.deng)
TextView deng;
Unbinder unbinder;
private MyPresenterFragment myPresenterFragment;
@Override
protected void initView(View view) {
}
@Override
protected void initData() {
}
@Override
protected BasePresenterFragment initFragment() {
myPresenterFragment = new MyPresenterFragment();
return myPresenterFragment;
}
@Override
protected int initLayout() {
return R.layout.deng_layout;
}
@Override
public void onSuccess(Object o) {
}
@Override
public void onError(String error) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO: inflate a fragment view
View rootView = super.onCreateView(inflater, container, savedInstanceState);
unbinder = ButterKnife.bind(this, rootView);
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@OnClick(R.id.deng)
public void onClick() {
Intent intent = new Intent(getContext(), Main2Activity.class);
startActivity(intent);
}
}