所需依赖
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'io.reactivex:rxjava:1.3.3'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'com.jakewharton:butterknife:6.1.0'
mainactivity布局
<?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">
<RelativeLayout
android:background="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="44dp">
<TextView
android:id="@+id/tv_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="10dp"
android:paddingRight="15dp"
android:text="←"
android:layout_alignParentLeft="true"
android:textColor="#ffffff"
android:textSize="25sp"/>
<TextView
android:textColor="#ffffff"
android:layout_centerInParent="true"
android:text="我的收藏"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/btn_editor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingLeft="10dp"
android:paddingRight="15dp"
android:text="编辑"
android:textColor="#ffffff"
android:textSize="15sp"/>
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="@null"
android:scrollbars="vertical"/>
</FrameLayout>
<LinearLayout
android:id="@+id/ll_mycollection_bottom_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#e6e6e6"
android:orientation="vertical"
>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#e5e5e5"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="#ffffff">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:text="已选择"
android:textColor="#1A1A1A"
android:textSize="14sp"/>
<TextView
android:id="@+id/tv_select_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="9dp"
android:layout_toRightOf="@+id/tv"
android:text="0"
android:textColor="#1A1A1A"
android:textSize="14sp"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="80dp"
android:layout_height="33dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:background="@drawable/button_noclickable_shape"
android:gravity="center"
android:text="删除"
android:textColor="#b7b8bd"
android:textSize="14sp"/>
<TextView
android:id="@+id/select_all"
android:layout_width="80dp"
android:layout_height="33dp"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:layout_toLeftOf="@+id/btn_delete"
android:background="@drawable/bg_selete_all"
android:gravity="center"
android:text="全选"
android:textColor="#000001"
android:textSize="14sp"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
drawable下的bg_seleteall.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#ffffff" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<stroke
android:width="1dp"
android:color="#dedede" />
</shape>
drawable下的bg_white.cornor_10.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#ffffff" />
</shape>
drawable下的button_noclickable_shape.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#8f7a55" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="6dp" />
</shape>
drawable下的button_shape.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#cbac73" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="6dp" />
</shape>
drawable下的divider_main_bg_height_1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:height="1px" />
<solid android:color="#edeff3" />
</shape>
要用到的布局
item.xml
<?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">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sd"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="dafsdasdaf"/>
</LinearLayout>
<View
android:background="#e5e5e5"
android:layout_width="match_parent"
android:layout_height="1px"/>
</LinearLayout>
item_my_live.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/check_box"
android:src="@mipmap/ic_uncheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="12dp"
android:gravity="center"
android:visibility="gone"/>
<RelativeLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/radio_img"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/radio_img"
android:ellipsize="end"
android:lineSpacingExtra="6dp"
android:maxLines="2"
android:text="小demo.looklook"/>
<TextView
android:id="@+id/tv_source"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/radio_img"
android:layout_alignLeft="@+id/tv_title"
android:text="哈哈哈"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/radio_img"
android:layout_marginTop="15dp"
android:background="#edeff3"/>
</RelativeLayout>
</LinearLayout>
pop_user.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00000000">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_white_cornor_10"
android:orientation="vertical"
android:paddingTop="5dp">
<TextView
android:gravity="center"
android:text="提示"
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:drawablePadding="4dp"
android:textColor="#44506d"
android:layout_marginTop="7dp"
android:textSize="16sp" />
<TextView
android:layout_marginTop="5dp"
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:textColor="#1a1a1a"
android:textSize="13sp" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="10dp"
android:background="#e3e5ea" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_cancle"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:text="关闭"
android:textColor="#3995fa"
android:textSize="14sp" />
<View
android:layout_width="1px"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:background="#edeff3" />
<Button
android:id="@+id/btn_sure"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:text="确定"
android:textColor="#3995fa"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
mainactivity
public class MainActivity extends Activity implements View.OnClickListener , MineRadioAdapter.OnItemClickListener{
private static final int MYLIVE_MODE_CHECK = 0;
private static final int MYLIVE_MODE_EDIT = 1;
@InjectView(R.id.recyclerview)
RecyclerView mRecyclerview;
@InjectView(R.id.tv_select_num)
TextView mTvSelectNum;
@InjectView(R.id.btn_delete)
Button mBtnDelete;
@InjectView(R.id.select_all)
TextView mSelectAll;
@InjectView(R.id.ll_mycollection_bottom_dialog)
LinearLayout mLlMycollectionBottomDialog;
@InjectView(R.id.btn_editor)
TextView mBtnEditor;
private MineRadioAdapter mRadioAdapter = null;
private List<MusicBean.SongListBean> mList = new ArrayList<>();
private int mEditMode = MYLIVE_MODE_CHECK;
private boolean isSelectAll = false;
private boolean editorStatus = false;
private int index = 0;
private TextView mFTv;
private MusicBean myLiveList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
initView();
initData();
initListener();
}
private void initView() {
mFTv = (TextView) findViewById(R.id.tv_f);
mFTv.setOnClickListener(this);
}
private void initData() {
mRadioAdapter = new MineRadioAdapter(MainActivity.this);
mRecyclerview.setLayoutManager(new LinearLayoutManager(MainActivity.this));
DividerItemDecoration itemDecorationHeader = new DividerItemDecoration(MainActivity.this, DividerItemDecoration.VERTICAL_LIST);
itemDecorationHeader.setDividerDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.divider_main_bg_height_1));
mRecyclerview.setAdapter(mRadioAdapter);
mRecyclerview.addItemDecoration(itemDecorationHeader);
OkHttpUtils.getInstance().doGet("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=20&offset=0", new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(String result) throws IOException {
Gson gson = new Gson();
MusicBean bean = gson.fromJson(result, MusicBean.class);
mList.addAll(bean.getSong_list());
mRadioAdapter.notifyAdapter(mList, false);
}
});
// for (int i = 0; i < 30; i++) {
// myLiveList = new MusicBean();
// myLiveList.setTitle("这是第" + i + "个条目");
// myLiveList.setSource("来源" + i);
// mList.add(myLiveList);
// mRadioAdapter.notifyAdapter(mList, false);
// }
}
/**
* 根据选择的数量是否为0来判断按钮的是否可点击.
*
* @param size
*/
private void setBtnBackground(int size) {
if (size != 0) {
mBtnDelete.setBackgroundResource(R.drawable.button_shape);
mBtnDelete.setEnabled(true);
mBtnDelete.setTextColor(Color.WHITE);
} else {
mBtnDelete.setBackgroundResource(R.drawable.button_noclickable_shape);
mBtnDelete.setEnabled(false);
mBtnDelete.setTextColor(ContextCompat.getColor(this, R.color.color_b7b8bd));
}
}
private void initListener() {
mRadioAdapter.setOnItemClickListener(this);
mBtnDelete.setOnClickListener(this);
mSelectAll.setOnClickListener(this);
mBtnEditor.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_delete:
deleteVideo();
break;
case R.id.select_all:
selectAllMain();
break;
case R.id.btn_editor:
updataEditMode();
break;
case R.id.tv_f:// TODO 17/11/06
fymian();
break;
default:
break;
}
}
private void fymian() {
new AlertDialog.Builder(this)
.setTitle("确认")
.setMessage("确定退出吗?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
})
.setNegativeButton("否", null)
.show();
}
/**
* 全选和反选
*/
private void selectAllMain() {
if (mRadioAdapter == null) {
return;
}
if (!isSelectAll) {
for (int i = 0, j = mRadioAdapter.getMyLiveList().size(); i < j; i++) {
mRadioAdapter.getMyLiveList().get(i).setSelect(true);
}
index = mRadioAdapter.getMyLiveList().size();
mBtnDelete.setEnabled(true);
mSelectAll.setText("取消全选");
isSelectAll = true;
} else {
for (int i = 0, j = mRadioAdapter.getMyLiveList().size(); i < j; i++) {
mRadioAdapter.getMyLiveList().get(i).setSelect(false);
}
index = 0;
mBtnDelete.setEnabled(false);
mSelectAll.setText("全选");
isSelectAll = false;
}
mRadioAdapter.notifyDataSetChanged();
setBtnBackground(index);
mTvSelectNum.setText(String.valueOf(index));
}
/**
* 删除逻辑
*/
private void deleteVideo() {
if (index == 0) {
mBtnDelete.setEnabled(false);
return;
}
final AlertDialog builder = new AlertDialog.Builder(this)
.create();
builder.show();
if (builder.getWindow() == null) {
return;
}
builder.getWindow().setContentView(R.layout.pop_user);//设置弹出框加载的布局
TextView msg = (TextView) builder.findViewById(R.id.tv_msg);
Button cancle = (Button) builder.findViewById(R.id.btn_cancle);
Button sure = (Button) builder.findViewById(R.id.btn_sure);
if (msg == null || cancle == null || sure == null) {
return;
}
if (index == 1) {
msg.setText("删除后不可恢复,是否删除该条目?");
} else {
msg.setText("删除后不可恢复,是否删除这" + index + "个条目?");
}
cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
builder.dismiss();
}
});
sure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = mRadioAdapter.getMyLiveList().size(), j = 0; i > j; i--) {
MusicBean.SongListBean myLive = mRadioAdapter.getMyLiveList().get(i - 1);
if (myLive.isSelect()) {
mRadioAdapter.getMyLiveList().remove(myLive);
index--;
}
}
index = 0;
mTvSelectNum.setText(String.valueOf(0));
setBtnBackground(index);
if (mRadioAdapter.getMyLiveList().size() == 0) {
mLlMycollectionBottomDialog.setVisibility(View.GONE);
}
mRadioAdapter.notifyDataSetChanged();
builder.dismiss();
}
});
}
private void updataEditMode() {
mEditMode = mEditMode == MYLIVE_MODE_CHECK ? MYLIVE_MODE_EDIT : MYLIVE_MODE_CHECK;
if (mEditMode == MYLIVE_MODE_EDIT) {
mBtnEditor.setText("取消");
mLlMycollectionBottomDialog.setVisibility(View.VISIBLE);
editorStatus = true;
} else {
mBtnEditor.setText("编辑");
mLlMycollectionBottomDialog.setVisibility(View.GONE);
editorStatus = false;
clearAll();
}
mRadioAdapter.setEditMode(mEditMode);
}
private void clearAll() {
mTvSelectNum.setText(String.valueOf(0));
isSelectAll = false;
mSelectAll.setText("全选");
setBtnBackground(0);
}
@Override
public void onItemClickListener(int pos, List<MusicBean.SongListBean> myLiveList) {
if (editorStatus) {
MusicBean.SongListBean myLive = myLiveList.get(pos);
Log.i("++++++++++++++", "onItemClickListener: "+myLiveList.get(pos));
//Toast.makeText(this, "进了", Toast.LENGTH_SHORT).show();
boolean isSelect = myLive.isSelect();
if (!isSelect) {
index++;
myLive.setSelect(true);
if (index == myLiveList.size()) {
isSelectAll = true;
mSelectAll.setText("取消全选");
}
} else {
myLive.setSelect(false);
index--;
isSelectAll = false;
mSelectAll.setText("全选");
}
setBtnBackground(index);
mTvSelectNum.setText(String.valueOf(index));
mRadioAdapter.notifyDataSetChanged();
}
}
}
recycleView的adapter
public class MineRadioAdapter extends RecyclerView.Adapter<MineRadioAdapter.ViewHolder> {
private static final int MYLIVE_MODE_CHECK = 0;
int mEditMode = MYLIVE_MODE_CHECK;
private int secret = 0;
private String title = "";
private Context context;
private List<MusicBean.SongListBean> mMyLiveList;
private OnItemClickListener mOnItemClickListener;
public MineRadioAdapter(Context context) {
this.context = context;
}
public void notifyAdapter(List<MusicBean.SongListBean> myLiveList, boolean isAdd) {
if (!isAdd) {
this.mMyLiveList = myLiveList;
} else {
this.mMyLiveList.addAll(myLiveList);
}
notifyDataSetChanged();
}
public List<MusicBean.SongListBean> getMyLiveList() {
if (mMyLiveList == null) {
mMyLiveList = new ArrayList<>();
}
return mMyLiveList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_my_live, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public int getItemCount() {
return mMyLiveList == null ?0:mMyLiveList.size();
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final MusicBean.SongListBean myLive = mMyLiveList.get(holder.getAdapterPosition());
holder.mTvTitle.setText(myLive.getTitle());
holder.mTvSource.setText(myLive.getAuthor());
Uri uri = Uri.parse(myLive.getPic_small());
holder.mRadioImg.setImageURI(uri);
if (mEditMode == MYLIVE_MODE_CHECK) {
holder.mCheckBox.setVisibility(View.GONE);
} else {
holder.mCheckBox.setVisibility(View.VISIBLE);
if (myLive.isSelect()) {
holder.mCheckBox.setImageResource(R.mipmap.ic_checked);
} else {
holder.mCheckBox.setImageResource(R.mipmap.ic_uncheck);
}
}
if (mOnItemClickListener != null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClickListener(holder.getAdapterPosition(), mMyLiveList);
}
});
}}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClickListener(int pos, List<MusicBean.SongListBean> myLiveList);
}
public void setEditMode(int editMode) {
mEditMode = editMode;
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
@InjectView(R.id.radio_img)
ImageView mRadioImg;
@InjectView(R.id.tv_title)
TextView mTvTitle;
@InjectView(R.id.tv_source)
TextView mTvSource;
@InjectView(R.id.root_view)
RelativeLayout mRootView;
@InjectView(R.id.check_box)
ImageView mCheckBox;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.inject(this,itemView);
}
}
}