View层
package com.example.framework;
public interface IBaseView {
void showLoading();
void hideLoading();
void showToast(String msg);
}
Presenter层
package com.example.framework;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class BasePresenter<V> {
private List<Disposable> disposableList = new ArrayList<>();
protected V iView;
protected synchronized void add(Disposable disposable) {
disposableList.add(disposable);
}
protected void attachView(V iView) {
this.iView = iView;
}
protected void detachView() {
this.iView = null;
for (Disposable disposable : disposableList) {
if (disposable.isDisposed()) {
disposable.dispose();
}
}
}
}
BaseActivity类
package com.example.framework;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.framework.manager.NetworkConnectionsManager;
import com.example.framework.view.LoadingPage;
import com.example.framework.view.ToolBar;
public abstract class BaseActivity<T extends BasePresenter> extends AppCompatActivity implements ToolBar.IToolbarListener, NetworkConnectionsManager.IConnectListener {
protected T httpPresenter;
protected boolean isUseLoading = true;
protected LoadingPage loadingPage;
protected ToolBar toolBar;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadingPage = new LoadingPage(this) {
@Override
protected int getSuccessLayoutId() {
return getLayoutId();
}
};
setContentView(loadingPage);
NetworkConnectionsManager.getInstance().registerConnectListener(this);
initView();
toolBar = findViewById(R.id.toolbar);
toolBar.setToolbarListener(this);
initPresenter();
initData();
initListener();
}
protected abstract void initPresenter();
protected abstract void initData();
protected abstract void initView();
protected abstract int getLayoutId();
protected void initListener(){
}
@Override
protected void onDestroy() {
super.onDestroy();
destroy();
}
public void destroy() {
if (httpPresenter != null) {
httpPresenter.detachView();
}
NetworkConnectionsManager.getInstance().unRegisterConnectListener(this);
}
@Override
public void onLeftClick() {
finish();
}
@Override
public void onRightImgClick() {
}
@Override
public void onRightTvClick() {
}
@Override
public void onConnected() {
}
@Override
public void onDisconnected() {
}
}
BaseFragment类
package com.example.framework;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.example.framework.manager.NetworkConnectionsManager;
import com.example.framework.view.LoadingPage;
import com.example.framework.view.ToolBar;
public abstract class BaseFragment<T extends BasePresenter> extends Fragment implements ToolBar.IToolbarListener, NetworkConnectionsManager.IConnectListener {
protected T httpPresenter;
protected View mBaseView;
protected ToolBar toolBar;
protected LoadingPage loadingPage;
protected boolean isUseLoading = true;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
toolBar = mBaseView.findViewById(R.id.toolbar);
toolBar.setToolbarListener(this);
NetworkConnectionsManager.getInstance().registerConnectListener(this);
initPresenter();
initData();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBaseView = loadingPage = new LoadingPage(getActivity()) {
@Override
protected int getSuccessLayoutId() {
return getLayoutId();
}
};
mBaseView.findViewById(getLayoutId());
return mBaseView;
}
protected abstract void initPresenter();
protected abstract void initData();
protected abstract void initView();
protected abstract int getLayoutId();
@Override
public void onDestroy() {
super.onDestroy();
destroy();
}
public void destroy() {
if (httpPresenter != null) {
httpPresenter.detachView();
}
NetworkConnectionsManager.getInstance().unRegisterConnectListener(this);
}
@Override
public void onLeftClick() {
}
@Override
public void onRightImgClick() {
}
@Override
public void onRightTvClick() {
}
@Override
public void onConnected() {
}
@Override
public void onDisconnected() {
loadingPage.showError("网络错误");
}
}
IHomeView获取数据
package com.example.shoppingmallsix.fragment.home;
import com.example.framework.IBaseView;
import com.example.net.bean.HomeBean;
public interface IHomeView extends IBaseView {
void getHomeData(HomeBean homeBean);
}
HomePresenter 获取数据
package com.example.shoppingmallsix.fragment.home;
import com.example.framework.BasePresenter;
import com.example.net.RetrofitCreator;
import com.example.net.bean.HomeBean;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class HomePresenter extends BasePresenter<IHomeView> {
public HomePresenter(IHomeView iHomeView) {
attachView(iHomeView);
}
public void getHomeDData() {
RetrofitCreator.getFiannceApiService().getHoemData()
.delay(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
add(disposable);
iView.showLoading();
}
})
.doFinally(new Action() {
@Override
public void run() throws Exception {
iView.hideLoading();
}
})
.subscribe(new Observer<HomeBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(HomeBean homeBean) {
if (iView != null) {
iView.getHomeData(homeBean);
}
}
@Override
public void onError(Throwable e) {
if (iView != null) {
iView.showToast(e.getMessage());
}
}
@Override
public void onComplete() {
}
});
}
}
页面展示
package com.example.shoppingmallsix.fragment.home;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.framework.BaseFragment;
import com.example.framework.manager.LogUtil;
import com.example.framework.manager.MessageManager;
import com.example.framework.view.ToolBar;
import com.example.net.bean.HomeBean;
import com.example.shoppingmallsix.BuildConfig;
import com.example.shoppingmallsix.R;
import com.example.shoppingmallsix.adapter.HomeAdapter;
import com.example.shoppingmallsix.message.MessageActivity;
import com.umeng.message.PushAgent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public class HomeFragment extends BaseFragment<HomePresenter> implements IHomeView,MessageManager.IMessage {
private ToolBar toolbar;
private EditText edtname;
private RecyclerView rv;
private HomeAdapter homeAdapter;
private HomePresenter homePresenter;
private List<Object> list = new ArrayList<>();
private LinearLayout homeMessage;
private TextView messageTv;
public HomeFragment() {
}
@Override
protected void initPresenter() {
homePresenter = new HomePresenter(this);
}
@Override
protected void initData() {
MessageManager.getInstance().register(this::onMessage);
homePresenter.getHomeDData();
}
@Override
protected void initView() {
toolbar = (ToolBar) mBaseView.findViewById(R.id.toolbar);
edtname = (EditText) mBaseView.findViewById(R.id.edtname);
rv = (RecyclerView) mBaseView.findViewById(R.id.rv);
homeMessage = mBaseView.findViewById(R.id.homeMessage);
messageTv = mBaseView.findViewById(R.id.messageTv);
PushAgent.getInstance(getContext()).onAppStart();
homeAdapter = new HomeAdapter(list, getActivity());
rv.setLayoutManager(new LinearLayoutManager(getContext()));
rv.setAdapter(homeAdapter);
homeMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), MessageActivity.class);
startActivity(intent);
}
});
}
@Override
protected int getLayoutId() {
return R.layout.fragment_home;
}
@Override
public void getHomeData(HomeBean homeBean) {
HomeBean.ResultBean result = homeBean.getResult();
int count = MessageManager.getInstance().getCount();
setCount(count);
if (BuildConfig.DEBUG) Log.d("HomeFragment", "homeBean:" + homeBean);
list.add(result.getBanner_info());
list.add(result.getChannel_info());
list.add(result.getAct_info());
list.add(result.getSeckill_info().getList());
list.add(result.getRecommend_info());
list.add(result.getHot_info());
loadingPage.showSuccessView();
homeAdapter.notifyDataSetChanged();
}
@Override
public void showLoading() {
loadingPage.showTransparentLoadingView();
}
@Override
public void hideLoading() {
}
@Override
public void showToast(String msg) {
loadingPage.showError(msg);
}
@Override
public void onMessage(int count) {
setCount(count);
}
public void setCount(int count){
if (count<=0){
messageTv.setText("消息");
}else {
messageTv.setText(count+"");
}
}
}