现在我们来看离线下载的demo
我们首先写的是xml中的小布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:background="#fff">
<ImageView //这个是个人的爱好给了一个返回的图标
android:id="@+id/image_view"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ca"
/>
<TextView
android:id="@+id/t"
android:layout_width="200dp"
android:layout_marginLeft="55dp"
android:layout_height="45dp"
android:gravity="center"
android:text="离线下载"
android:textSize="20sp"
/>
<Button
android:id="@+id/but_xia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="下载"
android:background="#fff"
/>
<android.support.v7.widget.RecyclerView //注意一点是V7包下的widget
android:id="@+id/recy_view"
android:layout_below="@+id/xia"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
以上的是xml的布局,现在来看一下Manactivity中的代码:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import com.honey.xulits.adapter.RecyclerViewAdapter;
import com.honey.xulits.bean.Catogray;
import java.util.ArrayList;
import java.util.List;
public class XiaZaiActivity extends AppCompatActivity implements View.OnClickListener {
private RecyclerView recy_view;
private Button but_xia;
private List<Catogray> list;
private CheckBox checkbox;
private ImageView image_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xia_zai);
//初始化 initView();
initData(); }
/** * 初始化数据 */
private void initData() {
list = new ArrayList<>();
Catogray c = new Catogray();
c.type = "top";
c.name = "头条";
list.add(c);
c = new Catogray();
c.type = "yule";
c.name = "娱乐";
list.add(c);
c = new Catogray();
c.type = "xinwen";
c.name = "新闻";
list.add(c);
c = new Catogray();
c.type = "redian";
c.name = "热点";
list.add(c);
c = new Catogray();
c.type = "shipin";
c.name = "视频";
list.add(c);
//适配器中
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, list);
recy_view.setLayoutManager(new LinearLayoutManager(this));
recy_view.setAdapter(adapter);
adapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() {
@Override
public void onItemClickListener(int pos, View view) {
checkbox = view.findViewById(R.id.off_checkBox);
Catogray c = list.get(pos);
if (checkbox.isChecked()) {
checkbox.setChecked(false);
c.state = false;
} else {
checkbox.setChecked(true);
c.state = true;
}
//修改原有list的数据,根据pos,设置新的对象,然后更新list
list.set(pos, c);
}
});
}
/**
* 获取控件
*/
private void initView() {
recy_view = (RecyclerView) findViewById(R.id.recy_view);
but_xia = (Button) findViewById(R.id.but_xia);
image_view= (ImageView) findViewById(R.id.image_view);
//点击下载
but_xia.setOnClickListener(this);
image_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
/**
* 点击事件
* @param view
*/
@Override
public void onClick(View view) {
if(list!=null&&list.size()>0){
for (Catogray catogray:list){
if (catogray.state){
loadData(catogray.type);
}
}
}
for (Catogray c:list){
System.out.println("state====" + c.state);
}
}
/**
* 只要有wifi,就下载离线数据,下载完成后保存到数据库
*
* @param type
*/
private void loadData(final String type) {
}
}
RecyclerViewAdapter这是适配器中用到了回调方法:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>{
private Context context;
private List<Catogray> list;
private OnItemClickListener onItemClickListener;
public RecyclerViewAdapter(Context context, List<Catogray> list) {
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//初始化条目view
View view= LayoutInflater.from(context).inflate(R.layout.item_xia_zai,null);
MyViewHolder myViewHolder=new MyViewHolder(view);
//实现自己的回调接口(注意回调接口,哪个场景下使用,就在哪里设置一下,才能起作用)
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClickListener((Integer) view.getTag(), view);
}
});
return myViewHolder;
}
/**
* 这个方法主要用于处理逻辑(绘制ui数据)
*/
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.name.setText(list.get(position).name);
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
private TextView name;
private CheckBox checkBox;
public MyViewHolder(View itemView) {
super(itemView);
name=itemView.findViewById(R.id.name);
checkBox=itemView.findViewById(R.id.off_checkBox);
}
}
/**
* 供调用者调用的接口(所以声明为public)
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
/**
* 条目点击事件接口(recyclerview本身不支持点击事件,必须要自己写)
*/
public interface OnItemClickListener {
void onItemClickListener(int pos, View view);
}
}
//bean类:
public class Catogray {
public String id;
public String type;
public String name;
public boolean state;
}
//适配器中的xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textSize="18sp"
android:text="top"/>
<CheckBox
android:id="@+id/off_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>