recycleViewshan

所需依赖
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);
        }
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值