重构代码之搜索功能

pull/1/head
jsyjst 6 years ago
parent 0d49de3c1f
commit 87df3ae933

@ -105,10 +105,10 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
if(songListBean.getSongmid().equals(FileHelper.getSong().getSongId())){
songHolder.playLine.setVisibility(View.VISIBLE);
mLastPosition =position;
songHolder.mItemView.setBackgroundResource(R.color.click);
songHolder.mItemView.setBackgroundResource(R.color.translucent);
}else {
songHolder.playLine.setVisibility(View.INVISIBLE);
songHolder.mItemView.setBackgroundResource(R.color.translucent);
songHolder.mItemView.setBackgroundResource(R.color.transparent);
}
songHolder.mItemView.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
@Override

@ -31,4 +31,7 @@ public class Constant {
public static final String PLAYER_STATUS="PlayerStatus";
public static final int PLAY=1;
public static final int PAUSE=2;
//TAG
public static final String TAG_ERROR = "error";
}

@ -26,10 +26,10 @@ import static com.example.musicplayer.app.Constant.NORMAL_STATE;
public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpFragment<T> {
private View mNormalView; //正常布局
private View mErrorView; //错误布局
private AVLoadingIndicatorView mLoadingView; //加载布局
private View mLoadingText; //加载文字
private View mLoadingView;//加载布局
private AVLoadingIndicatorView avLoadingView;
private int mCurrentState;//当前布局状态
private int mCurrentState = NORMAL_STATE;//当前布局状态
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
@ -48,10 +48,14 @@ public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpF
View.inflate(mActivity,R.layout.loading_view,parentPanel);//加载loading布局
mLoadingView = parentPanel.findViewById(R.id.loadingView);
mLoadingText = parentPanel.findViewById(R.id.loadingText);
avLoadingView = parentPanel.findViewById(R.id.avLoading);
mErrorView = parentPanel.findViewById(R.id.errorView);
TextView reloadBtn = parentPanel.findViewById(R.id.reloadBtn);
reloadBtn.setOnClickListener(view1 -> reload()); //重新加载
mNormalView.setVisibility(View.VISIBLE);
mErrorView.setVisibility(View.GONE);
mLoadingView.setVisibility(View.GONE);
}
@Override
@ -67,7 +71,7 @@ public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpF
public void showErrorView() {
super.showErrorView();
if(mCurrentState == ERROR_STATE) return;
showViewByState(mCurrentState);
hideViewByState(mCurrentState);
mCurrentState = ERROR_STATE;
showViewByState(mCurrentState);
}
@ -76,7 +80,7 @@ public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpF
public void showLoading() {
super.showLoading();
if(mCurrentState == LOADING_STATE) return;
showViewByState(mCurrentState);
hideViewByState(mCurrentState);
mCurrentState = LOADING_STATE;
showViewByState(mCurrentState);
}
@ -86,9 +90,8 @@ public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpF
if(mNormalView == null) return;
mNormalView.setVisibility(View.GONE);
}else if(state == LOADING_STATE){
if(mLoadingView == null||mLoadingText == null) return;
mLoadingView.hide();
mLoadingText.setVisibility(View.GONE);
if(mLoadingView == null||avLoadingView == null) return;
mLoadingView.setVisibility(View.GONE);
}else {
if(mErrorView == null ) return;
mErrorView.setVisibility(View.GONE);
@ -99,12 +102,14 @@ public abstract class BaseLoadingFragment<T extends IPresenter> extends BaseMvpF
if(mNormalView == null) return;
mNormalView.setVisibility(View.VISIBLE);
}else if(state == LOADING_STATE){
if(mLoadingView == null||mLoadingText == null) return;
mLoadingView.show();
mLoadingText.setVisibility(View.VISIBLE);
if(mLoadingView == null||avLoadingView == null) return;
mLoadingView.setVisibility(View.VISIBLE);
avLoadingView.show();
}else {
if(mErrorView == null ) return;
mErrorView.setVisibility(View.VISIBLE);
}
}
}

@ -0,0 +1,131 @@
package com.example.musicplayer.base.observer;
import android.net.ParseException;
import android.os.Handler;
import android.util.Log;
import com.example.musicplayer.R;
import com.example.musicplayer.app.App;
import com.example.musicplayer.base.view.BaseView;
import com.google.gson.JsonParseException;
import org.json.JSONException;
import java.net.UnknownHostException;
import io.reactivex.observers.ResourceObserver;
import retrofit2.HttpException;
import static com.example.musicplayer.app.Constant.TAG_ERROR;
/**
* <pre>
* author :
* time : 2019/07/16
* desc : RxJava
* </pre>
*/
public class BaseObserver<T> extends ResourceObserver<T> {
private static final String TAG = "BaseObserver";
private boolean isShowLoadingView = true;
private boolean isShowErrorView =true;
private BaseView baseView;
private BaseObserver(){}
protected BaseObserver(BaseView baseView){
this(baseView,false,false);
}
protected BaseObserver(BaseView baseView,boolean isShowLoadingView){
this(baseView,isShowLoadingView,false);
}
protected BaseObserver(BaseView baseView,boolean isShowLoadingView, boolean isShowErrorView){
this.baseView = baseView;
this.isShowLoadingView = isShowLoadingView;
this.isShowErrorView = isShowErrorView;
}
@Override
protected void onStart() {
if(isShowLoadingView) baseView.showLoading();
}
@Override
public void onNext(T t) {
new Handler().postDelayed(()->{
baseView.showNormalView();
},500);
}
@Override
public void onError(Throwable e) {
new Handler().postDelayed(()->{
if(isShowErrorView) baseView.showErrorView();
},500);
e.printStackTrace();
if (e instanceof UnknownHostException) {
Log.e(TAG_ERROR, "networkError" + e.getMessage());
networkError();
} else if (e instanceof InterruptedException) {
Log.e(TAG_ERROR, "timeout" + e.getMessage());
timeoutError();
} else if (e instanceof HttpException) {
Log.e(TAG_ERROR, "http错误" + e.getMessage());
httpError();
} else if (e instanceof JsonParseException || e instanceof JSONException || e instanceof ParseException) {
Log.e(TAG_ERROR, "解析错误:" + e.getMessage());
parseError();
}else {
Log.e(TAG_ERROR, "未知错误:" + e.getMessage());
unknown();
}
}
@Override
public void onComplete() {
}
/**
*
*/
protected void unknown() {
baseView.showToast(App.getContext().getString(R.string.error_unknown));
}
/**
*
*/
protected void parseError() {
baseView.showToast(App.getContext().getString(R.string.error_parse));
}
/**
* http
*/
protected void httpError() {
baseView.showToast(App.getContext().getString(R.string.error_http));
}
/**
*
*/
protected void timeoutError() {
baseView.showToast(App.getContext().getString(R.string.error_timeout));
}
/**
*
*/
protected void networkError() {
baseView.showToast(App.getContext().getString(R.string.error_network));
}
}

@ -1,5 +1,7 @@
package com.example.musicplayer.contract;
import com.example.musicplayer.base.presenter.IPresenter;
import com.example.musicplayer.base.view.BaseView;
import com.example.musicplayer.entiy.AlbumSong;
import java.util.ArrayList;
@ -15,7 +17,7 @@ public interface IAlbumSongContract {
void getAlbumDetail(String id,int type); //获取专辑的更多信息
void insertAllAlbumSong(ArrayList<AlbumSong.DataBean.GetSongInfoBean> songList); //将专辑歌曲添加到数据库
}
interface View{
interface View extends BaseView {
void setAlbumSongList(List<AlbumSong.DataBean.GetSongInfoBean> songList); //成功获取专辑歌曲后填充列表
void showAlbumSongError();//获取专辑失败
void showAlbumMessage(String name,String language,String company,String albumType,String desc); //展示专辑详细
@ -23,7 +25,7 @@ public interface IAlbumSongContract {
void hideLoading(); //隐藏进度
void showNetError(); //显示网络错误
}
interface Presenter{
interface Presenter extends IPresenter<BaseView> {
void getAlbumDetail(String id,int type); //获取专辑的更多信息
void getAlbumDetailSuccess(int type,List<AlbumSong.DataBean.GetSongInfoBean>songList,
String name,String language,String company,String albumType,String desc); //成功获取专辑信息

@ -13,45 +13,21 @@ import java.util.List;
*/
public interface ISearchContentContract {
interface Model{
void search(String seek,int offset); //搜索
void searchMore(String seek,int offset); //搜索更多
void searchAlbum(String seek,int offset); //搜索专辑
void searchAlbumMore(String seek,int offset);//搜索更多专辑
}
interface View extends BaseView {
void setSongsList(ArrayList<SearchSong.DataBean.ListBean> songListBeans); //显示歌曲列表
void searchMoreSuccess(ArrayList<SearchSong.DataBean.ListBean> songListBeans); //搜索更多内容成功
void searchMoreError(); //搜索更多内容失败
void searchMore();//搜索更多
void showError();
void showSearcherMoreNetworkError();//下拉刷新网络错误
void searchAlbumSuccess(List<Album.DataBean.ListBean> albumList); //获取专辑成功
void searchAlbumMoreSuccess(List<Album.DataBean.ListBean> songListBeans); //搜索更多内容成功
void searchAlbumError(); //获取专辑失败
void showNetError(); //显示网络错误
}
interface Presenter extends IPresenter<View> {
void search(String seek,int offset); //搜索
void searchMore(String seek,int offset); //搜索更多
void searchSuccess(ArrayList<SearchSong.DataBean.ListBean> songListBeans); //搜索成功
void searchMoreSuccess(ArrayList<SearchSong.DataBean.ListBean> songListBeans); //搜索更多内容成功
void searchMoreError(); //搜索更多内容失败
void showSearchMoreNetworkError();//下拉刷新网络错误
void searchAlbum(String seek,int offset); //搜索专辑
void searchAlbumSuccess(List<Album.DataBean.ListBean> albumList); //获取专辑成功
void searchAlbumError(); //获取专辑失败
void searchAlbumMore(String seek,int offset);//搜索更多专辑
void searchAlbumMoreSuccess(List<Album.DataBean.ListBean> songListBeans); //搜索更多内容成功
void networkError();//网络错误
}
}

@ -1,174 +0,0 @@
package com.example.musicplayer.model;
import android.util.Log;
import com.example.musicplayer.app.Constant;
import com.example.musicplayer.contract.ISearchContentContract;
import com.example.musicplayer.entiy.Album;
import com.example.musicplayer.entiy.SearchSong;
import com.example.musicplayer.model.https.RetrofitFactory;
import com.example.musicplayer.util.RxApiManager;
import java.net.UnknownHostException;
import java.util.ArrayList;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
/**
* Created by on 2018/11/21.
*/
public class SearchContentModel implements ISearchContentContract.Model {
private static final String TAG = "SearchContentModel";
private ISearchContentContract.Presenter mPresenter;
public SearchContentModel(ISearchContentContract.Presenter presenter) {
mPresenter = presenter;
}
@Override
public void search(String seek, int offset) {
RetrofitFactory.createRequest().search(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SearchSong>() {
@Override
public void onSubscribe(Disposable d) {
RxApiManager.get().add(Constant.SEARCH_SONG, d);
}
@Override
public void onNext(SearchSong value) {
mPresenter.searchSuccess((ArrayList<SearchSong.DataBean.ListBean>) value.getData().getList());
}
@Override
public void onError(Throwable e) {
if (e instanceof UnknownHostException) {
mPresenter.networkError();
}
e.printStackTrace();
Log.d(TAG, "onError: " + e.toString());
}
@Override
public void onComplete() {
}
});
}
@Override
public void searchMore(String seek, int offset) {
RetrofitFactory.createRequest().search(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SearchSong>() {
@Override
public void onSubscribe(Disposable d) {
RxApiManager.get().add(Constant.SEARCH_SONG_MORE, d);
}
@Override
public void onNext(SearchSong value) {
if (value.getCode() == 200) {
if (value.getData().getList().size() == 0) {
mPresenter.searchMoreError();
} else {
mPresenter.searchMoreSuccess((ArrayList<SearchSong.DataBean.ListBean>) value.getData().getList());
}
} else {
mPresenter.searchMoreError();
}
}
@Override
public void onError(Throwable e) {
mPresenter.showSearchMoreNetworkError();
Log.d(TAG, "onError: " + e.toString());
}
@Override
public void onComplete() {
}
});
}
@Override
public void searchAlbum(String seek, int offset) {
RetrofitFactory.createRequest().searchAlbum(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Album>() {
@Override
public void onSubscribe(Disposable d) {
RxApiManager.get().add(Constant.SEARCH_ALBUM, d);
}
@Override
public void onNext(Album value) {
if (value.getCode() == 200) {
mPresenter.searchAlbumSuccess(value.getData().getList());
} else {
mPresenter.searchAlbumError();
}
}
@Override
public void onError(Throwable e) {
if (e instanceof UnknownHostException) {
mPresenter.networkError();
} else {
mPresenter.searchAlbumError();
}
e.printStackTrace();
Log.d(TAG, "onError: searchAlbumError" + e.toString());
}
@Override
public void onComplete() {
}
});
}
@Override
public void searchAlbumMore(String seek, int offset) {
RetrofitFactory.createRequest().searchAlbum(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Album>() {
@Override
public void onSubscribe(Disposable d) {
RxApiManager.get().add(Constant.SEARCH_ALBUM_MORE, d);
}
@Override
public void onNext(Album value) {
if (value.getCode()==200) {
Log.d(TAG, "onNext: success");
if (value.getData().getCurnum() == 0) {
mPresenter.searchMoreError();
} else {
mPresenter.searchAlbumMoreSuccess(value.getData().getList());
}
} else {
mPresenter.searchMoreError();
}
}
@Override
public void onError(Throwable e) {
mPresenter.showSearchMoreNetworkError();
Log.d(TAG, "onError: " + e.toString());
}
@Override
public void onComplete() {
}
});
}
}

@ -59,7 +59,7 @@ public class RetrofitFactory {
private synchronized static OkHttpClient getOkHttpClient(){
if(sOkHttpClient == null){
sOkHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.connectTimeout(100, TimeUnit.SECONDS)
.build();
}
return sOkHttpClient;

@ -2,7 +2,8 @@ package com.example.musicplayer.presenter;
import android.os.Handler;
import com.example.musicplayer.base.BasePresenter;
import com.example.musicplayer.base.presenter.BasePresenter;
import com.example.musicplayer.contract.IAlbumSongContract;
import com.example.musicplayer.entiy.AlbumSong;
import com.example.musicplayer.model.AlbumSongModel;
@ -21,12 +22,6 @@ public class AlbumSongPresenter extends BasePresenter<IAlbumSongContract.View> i
private final static String TAG = "AlbumSongPresenter";
private AlbumSongModel mModel;
private Handler mHandler = new Handler();
public AlbumSongPresenter() {
mModel = new AlbumSongModel(this);
}
@Override
public void getAlbumDetail(String id, int type) {

@ -1,13 +1,16 @@
package com.example.musicplayer.presenter;
import com.example.musicplayer.base.BasePresenter;
import com.example.musicplayer.base.observer.BaseObserver;
import com.example.musicplayer.base.presenter.BasePresenter;
import com.example.musicplayer.contract.ISearchContentContract;
import com.example.musicplayer.entiy.Album;
import com.example.musicplayer.entiy.SearchSong;
import com.example.musicplayer.model.SearchContentModel;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* Created by on 2018/11/21.
@ -15,123 +18,94 @@ import java.util.List;
public class SearchContentPresenter extends BasePresenter<ISearchContentContract.View>
implements ISearchContentContract.Presenter {
private SearchContentModel mModel;
private android.os.Handler mHandler = new android.os.Handler();
public SearchContentPresenter(){
mModel = new SearchContentModel(this);
}
@Override
public void search(String seek,int offset) {
mModel.search(seek,offset);
if(isAttachView()){
getMvpView().showLoading();
}
}
@Override
public void searchMore(String seek,int offset) {
mModel.searchMore(seek,offset);
}
@Override
public void searchSuccess(final ArrayList<SearchSong.DataBean.ListBean> songListBeans) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAttachView()){
getMvpView().hideLoading();
getMvpView().setSongsList(songListBeans);
}
}
},500);
}
@Override
public void searchError() {
getMvpView().showError();
}
@Override
public void searchMoreSuccess(final ArrayList<SearchSong.DataBean.ListBean> songListBeans) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAttachView()){
getMvpView().searchMoreSuccess(songListBeans);
}
}
},500);
public void search(String seek, int offset) {
addRxSubscribe(
mModel.search(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new BaseObserver<SearchSong>(mView, true, true) {
@Override
public void onNext(SearchSong searchSong) {
super.onNext(searchSong);
if (searchSong.getCode() == 200) {
mView.setSongsList((ArrayList<SearchSong.DataBean.ListBean>)
searchSong.getData().getList());
}
}
}));
}
@Override
public void searchMoreError() {
if(isAttachView()){
getMvpView().searchMoreError();
}
public void searchMore(String seek, int offset) {
addRxSubscribe(
mModel.search(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new BaseObserver<SearchSong>(mView, false, true) {
@Override
public void onNext(SearchSong searchSong) {
super.onNext(searchSong);
if (searchSong.getCode() == 200) {
ArrayList<SearchSong.DataBean.ListBean> songListBeans =
(ArrayList<SearchSong.DataBean.ListBean>) searchSong.getData().getList();
if (songListBeans.size() == 0) {
mView.searchMoreError();
} else {
mView.searchMoreSuccess(songListBeans);
}
} else {
mView.searchMoreError();
}
}
@Override
public void onError(Throwable e){
super.onError(e);
mView.showSearcherMoreNetworkError();
}
}));
}
@Override
public void showSearchMoreNetworkError() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAttachView()){
getMvpView().showSearcherMoreNetworkError();
}
}
},500);
}
@Override
public void searchAlbum(String seek, int offset) {
mModel.searchAlbum(seek,offset);
if(isAttachView()){
getMvpView().showLoading();
}
}
@Override
public void searchAlbumSuccess(List<Album.DataBean.ListBean> albumList) {
if(isAttachView()){
getMvpView().searchAlbumSuccess(albumList);
getMvpView().hideLoading();
}
}
@Override
public void searchAlbumError() {
if(isAttachView()){
getMvpView().searchAlbumError();
getMvpView().hideLoading();
}
addRxSubscribe(
mModel.searchAlbum(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new BaseObserver<Album>(mView, true, true) {
@Override
public void onNext(Album album) {
super.onNext(album);
if (album.getCode() == 200) {
mView.searchAlbumSuccess(album.getData().getList());
} else {
mView.searchAlbumError();
}
}
}));
}
@Override
public void searchAlbumMore(String seek, int offset) {
mModel.searchAlbumMore(seek,offset);
}
@Override
public void searchAlbumMoreSuccess(final List<Album.DataBean.ListBean> songListBeans) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(isAttachView()){
getMvpView().searchAlbumMoreSuccess(songListBeans);
}
}
},500);
addRxSubscribe(
mModel.searchAlbum(seek, offset)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new BaseObserver<Album>(mView, false, true) {
@Override
public void onNext(Album album) {
super.onNext(album);
if (album.getCode() == 200) {
mView.searchAlbumMoreSuccess(album.getData().getList());
} else {
mView.searchMoreError();
}
}
@Override
public void onError(Throwable e){
super.onError(e);
mView.showSearcherMoreNetworkError();
}
}));
}
@Override
public void networkError() {
if(isAttachView()){
getMvpView().showNetError();
}
}
}

@ -21,6 +21,8 @@ import android.widget.TextView;
import com.example.musicplayer.R;
import com.example.musicplayer.adapter.SearchContentAdapter;
import com.example.musicplayer.base.fragment.BaseLoadingFragment;
import com.example.musicplayer.base.fragment.BaseMvpFragment;
import com.example.musicplayer.callback.*;
import com.example.musicplayer.app.BaseUri;
import com.example.musicplayer.app.BroadcastName;
@ -43,32 +45,35 @@ import com.wang.avi.AVLoadingIndicatorView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
/**
* Created by on 2018/11/21.
*/
public class SearchContentFragment extends Fragment implements ISearchContentContract.View {
public class SearchContentFragment extends BaseLoadingFragment<SearchContentPresenter> implements ISearchContentContract.View {
private static final String TAG = "SearchContentFragment";
public static final String TYPE_KEY = "type";
public static final String SEEK_KEY = "seek";
public static final String IS_ONLINE = "online";
private int mOffset = 1; //用于翻页搜索
private String mAlbumName, mSingerName, mAlbumPic, mPublicTime;
private SongFinishReceiver songFinishReceiver;
private SearchContentPresenter mPresenter;
private LRecyclerView mRecycler;
private LinearLayoutManager manager;
private SearchContentAdapter mAdapter;
private ArrayList<SearchSong.DataBean.ListBean> mSongList = new ArrayList<>();
private List<Album.DataBean.ListBean> mAlbumList;
private IntentFilter intentFilter;
private LRecyclerViewAdapter mLRecyclerViewAdapter;//下拉刷新
private AVLoadingIndicatorView mLoading;
private TextView mLoadingTv;
private ImageView mBackgroundIv;
private ImageView mNetworkErrorIv;
@BindView(R.id.normalView)
LRecyclerView mRecycler;
@BindView(R.id.iv_background)
ImageView mBackgroundIv;
private Bundle mBundle;
private String mSeek;
@ -89,32 +94,41 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search_content, container, false);
mBundle = getArguments();
if (mBundle != null) {
mSeek = mBundle.getString(SEEK_KEY);
mType = mBundle.getString(TYPE_KEY);
protected void loadData() {
if (mType.equals("song")) {
mPresenter.search(mSeek, 1);
} else if (mType.equals("album")) {
mPresenter.searchAlbum(mSeek, 1);
}
searchMore();
}
mRecycler = view.findViewById(R.id.normalView);
mLoading = view.findViewById(R.id.avi);
mLoadingTv = view.findViewById(R.id.tv_loading);
mBackgroundIv = view.findViewById(R.id.iv_background);
mNetworkErrorIv = view.findViewById(R.id.iv_network_error);
mPresenter = new SearchContentPresenter();
mPresenter.attachView(this);
@Override
public void reload() {
super.reload();
if (mType.equals("song")) {
mPresenter.search(mSeek, 1);
} else if (mType.equals("album")) {
mPresenter.searchAlbum(mSeek, 1);
mRecycler.setBackgroundResource(R.color.translucent);
}
searchMore();
return view;
}
@Override
protected int getLayoutId() {
return R.layout.fragment_search_content;
}
@Override
protected void initView() {
super.initView();
mBundle = getArguments();
if (mBundle != null) {
mSeek = mBundle.getString(SEEK_KEY);
mType = mBundle.getString(TYPE_KEY);
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@ -135,33 +149,28 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
}
@Override
protected SearchContentPresenter getPresenter() {
mPresenter = new SearchContentPresenter();
return mPresenter ;
}
@Override
public void onDestroy() {
super.onDestroy();
getActivity().unbindService(connection);
getActivity().unregisterReceiver(songFinishReceiver);
}
@Override
public void onDestroyView(){
Log.d(TAG, "onDestroyView: true");
RxApiManager.get().cancel(Constant.SEARCH_SONG);
RxApiManager.get().cancel(Constant.SEARCH_ALBUM);
RxApiManager.get().cancel(Constant.SEARCH_ALBUM_MORE);
RxApiManager.get().cancel(Constant.SEARCH_SONG_MORE);
super.onDestroyView();
}
@Override
public void setSongsList(final ArrayList<SearchSong.DataBean.ListBean> songListBeans) {
Log.d(TAG, "setSongsList: "+songListBeans.get(0).getSongname());
mSongList.addAll(songListBeans);
mAdapter = new SearchContentAdapter(mSongList, mSeek, getActivity(), Constant.TYPE_SONG);
mLRecyclerViewAdapter = new LRecyclerViewAdapter(mAdapter);
mRecycler.setLayoutManager(manager);
mRecycler.setAdapter(mLRecyclerViewAdapter);
mAdapter.setItemClick(new OnItemClickListener() {
@Override
public void onClick(int position) {
@ -184,7 +193,6 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
@Override
public void searchMoreSuccess(ArrayList<SearchSong.DataBean.ListBean> songListBeans) {
Log.d(TAG, "searchMoreSuccess: success=" + songListBeans.size());
mSongList.addAll(songListBeans);
mAdapter.notifyDataSetChanged();
mRecycler.refreshComplete(Constant.OFFSET);
@ -212,17 +220,12 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
}
});
//设置底部加载颜色
mRecycler.setFooterViewColor(R.color.colorAccent, R.color.musicStyle_low, R.color.translucent);
mRecycler.setFooterViewColor(R.color.colorAccent, R.color.musicStyle_low, R.color.transparent);
//设置底部加载文字提示
mRecycler.setFooterViewHint("拼命加载中", "已经全部为你呈现了", "网络不给力啊,点击再试一次吧");
}
@Override
public void showError() {
CommonUtil.showToast(getActivity(), "连接超时");
}
@Override
public void showSearcherMoreNetworkError() {
mRecycler.setOnNetWorkErrorListener(new OnNetWorkErrorListener() {
@ -242,7 +245,6 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
mLRecyclerViewAdapter = new LRecyclerViewAdapter(mAdapter);
mRecycler.setLayoutManager(manager);
mRecycler.setAdapter(mLRecyclerViewAdapter);
mAdapter.setAlbumClick(new OnAlbumItemClickListener() {
@Override
public void onClick(int position) {
@ -263,27 +265,6 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
CommonUtil.showToast(getActivity(), "获取专辑信息失败");
}
@Override
public void showLoading() {
mLoading.show();
}
@Override
public void hideLoading() {
mRecycler.setVisibility(View.VISIBLE);
mLoading.hide();
mLoadingTv.setVisibility(View.GONE);
mBackgroundIv.setVisibility(View.GONE);
mNetworkErrorIv.setVisibility(View.GONE);
}
@Override
public void showNetError() {
mRecycler.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
mLoadingTv.setVisibility(View.GONE);
mNetworkErrorIv.setVisibility(View.VISIBLE);
}
/**
* fragment
@ -328,10 +309,10 @@ public class SearchContentFragment extends Fragment implements ISearchContentCon
//获取歌手,因为歌手可能有很多个
private String getSinger( SearchSong.DataBean.ListBean dataBean){
String singer = dataBean.getSinger().get(0).getName();
StringBuilder singer = new StringBuilder(dataBean.getSinger().get(0).getName());
for (int i = 1; i < dataBean.getSinger().size(); i++) {
singer+="、"+dataBean.getSinger().get(i).getName();
singer.append("、").append(dataBean.getSinger().get(i).getName());
}
return singer;
return singer.toString();
}
}

@ -9,7 +9,7 @@
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/2"
android:src="@drawable/song_empty"
android:scaleType="centerCrop"/>
<TextView

@ -57,7 +57,8 @@
android:id="@+id/normalView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp">
android:layout_marginBottom="65dp"
android:overScrollMode="never">
</android.support.v7.widget.RecyclerView>

@ -51,7 +51,8 @@
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp"/>
android:layout_marginBottom="65dp"
android:overScrollMode="never"/>
</LinearLayout>
<RelativeLayout
@ -63,7 +64,7 @@
android:id="@+id/iv_empty"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/2"
android:src="@drawable/song_empty"
android:scaleType="centerCrop"
android:layout_marginTop="120dp"
android:layout_centerHorizontal="true"/>

@ -12,14 +12,15 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp"
android:src="@color/translucent"/>
android:background="@color/translucent"
/>
<com.github.jdsjlzx.recyclerview.LRecyclerView
android:id="@+id/normalView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp"
android:visibility="gone">
android:overScrollMode="never">
</com.github.jdsjlzx.recyclerview.LRecyclerView>

@ -17,6 +17,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp"
android:overScrollMode="never"
>
</android.support.v7.widget.RecyclerView>

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadingView"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/loadingView"
android:id="@+id/avLoading"
style="@style/AVLoadingIndicatorView.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -14,10 +15,9 @@
app:indicatorName="LineScaleIndicator" />
<TextView
android:id="@+id/loadingText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/loadingView"
android:layout_below="@+id/avLoading"
android:layout_centerHorizontal="true"
android:text="@string/loading_text"
android:textColor="@color/white_blue"

@ -29,4 +29,13 @@
<string name="loading_text">加载中,请稍后</string>
<string name="reload">重试</string>
//error
<string name="error_unknown">未知错误</string>
<string name="error_network">当前网络不可用,请检查网络设置</string>
<string name="error_timeout">连接超时,请重试</string>
<string name="error_http">网络错误</string>r
<string name="error_parse">解析错误</string>
<string name="error_view_network">网络不给力</string>
<string name="error_view_retry">重试</string>
</resources>

Loading…
Cancel
Save