activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.exam.20171202.MainActivity">
<FrameLayout
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="9">
<RadioButton
android:id="@+id/rb1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:background="@drawable/ac0"/>
<RadioButton
android:id="@+id/rb2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:background="@drawable/abw"/>
<RadioButton
android:id="@+id/rb3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:background="@drawable/aby"/>
<RadioButton
android:id="@+id/rb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:background="@drawable/abu"/>
<RadioButton
android:id="@+id/rb5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:background="@drawable/ac2"/>
</RadioGroup>
</LinearLayout>
fragment1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
item布局
<?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="150dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:padding="20dp">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sdv"
android:layout_width="120dp"
android:layout_height="120dp"
app:placeholderImage="@mipmap/ic_launcher_round"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="20dp"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"/>
</LinearLayout>
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
@BindView(R.id.rb1)
RadioButton rb1;
@BindView(R.id.rb2)
RadioButton rb2;
@BindView(R.id.rb3)
RadioButton rb3;
@BindView(R.id.rb4)
RadioButton rb4;
@BindView(R.id.rb5)
RadioButton rb5;
@BindView(R.id.rg)
RadioGroup rg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Fragment1 fragment1 = new Fragment1();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment1).commit();
rb1.setBackgroundResource(R.drawable.ac1);
}
@OnClick({R.id.rb1,R.id.rb2,R.id.rb3,R.id.rb4,R.id.rb5})
public void onClick(View v) {
rb1.setBackgroundResource(R.drawable.ac0);
rb2.setBackgroundResource(R.drawable.abw);
rb3.setBackgroundResource(R.drawable.aby);
rb4.setBackgroundResource(R.drawable.abu);
rb5.setBackgroundResource(R.drawable.ac2);
switch (v.getId()) {
default:
break;
case R.id.rb1:
Fragment1 fragment1 = new Fragment1();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment1).commit();
rb1.setBackgroundResource(R.drawable.ac1);
break;
case R.id.rb2:
Fragment2 fragment2 = new Fragment2();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment2).commit();
rb2.setBackgroundResource(R.drawable.abx);
break;
case R.id.rb3:
Fragment3 fragment3 = new Fragment3();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment3).commit();
rb3.setBackgroundResource(R.drawable.abz);
break;
case R.id.rb4:
Fragment4 fragment4 = new Fragment4();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment4).commit();
rb4.setBackgroundResource(R.drawable.abv);
break;
case R.id.rb5:
Fragment5 fragment5 = new Fragment5();
getSupportFragmentManager().beginTransaction().replace(R.id.frag,fragment5).commit();
rb5.setBackgroundResource(R.drawable.ac3);
break;
}
}
}
bean类
ClassBeans
public class ClassBeans<T> {
private boolean error;
private List<T> results;
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
@Override
public String toString() {
return "ClassBeans{" + "error=" + error + ", results=" + results + '}';
}
}
DaoBean
@Entity
public class DaoBean {
// @Id(autoincrement = true)
// private Long id;
private String _id;
private String createdAt;
private String desc;
private String publishedAt;
private String source;
private String type;
private String url;
private boolean used;
private String who;
@Convert(converter = ImageUtil.class,columnType = String.class)
public List<String> images;
}
GreenDaoManager
public class GreenDaoManager {
private static GreenDaoManager managers;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private GreenDaoManager(Context context){
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "contacts-db",null);
SQLiteDatabase sqLiteDatabase = devOpenHelper.getWritableDatabase();
daoMaster = new DaoMaster(sqLiteDatabase);
daoSession = daoMaster.newSession();
}
public static GreenDaoManager getGreenDaoManager(Context context){
if (managers == null){
synchronized (GreenDaoManager.class){
if (managers == null){
managers = new GreenDaoManager(context);
}
}
}
return managers;
}
public DaoSession getDaoSession(){
return daoSession;
}
public DaoMaster getDaoMaster(){
return daoMaster;
}
}
MyApp--去清单文件注册
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
GreenDaoManager.getGreenDaoManager(this);
}
}
ServerApi
public interface ServerApi {
@GET("api/data/Android/{size}/{page}")
Call<ClassBeans<DaoBean>> list(@Path("size") int size,@Path("page") int page);
}
RetrofitHelper
public class RetrofitHelper {
public static OkHttpClient client;
public static ServerApi serverApi;
static {
getClient();
}
public static OkHttpClient getClient() {
if (client == null){
synchronized (RetrofitHelper.class){
if (client == null){
client = new OkHttpClient();
}
}
}
return client;
}
public static ServerApi getServerApi(){
if (serverApi == null){
synchronized (ServerApi.class){
if (serverApi == null){
serverApi = OnCreatApi(ServerApi.class,"http://gank.io/");
}
}
}
return serverApi;
}
public static <T> T OnCreatApi(Class<T> tClass,String url){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(tClass);
}
}
ImageUtil--加载图片
public class ImageUtil implements PropertyConverter<List<String>, String> {
@Override
public List<String> convertToEntityProperty(String databaseValue) {
List<String> list = new ArrayList<>();
list.add(databaseValue);
return null;
}
@Override
public String convertToDatabaseValue(List<String> entityProperty) {
return (entityProperty == null && !entityProperty.isEmpty())?"" : entityProperty.get(0);
}
}
Fragment1
public class Fragment1 extends Fragment {
private DaoBeanDao dao;
private RecyclerView rv;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.fragment1, null);
rv = view.findViewById(R.id.rv);
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
rv.setLayoutManager(manager);
//GreenDao
dao = GreenDaoManager.getGreenDaoManager(getActivity()).getDaoSession().getDaoBeanDao();
//Retrofit
ServerApi serverApi = RetrofitHelper.getServerApi();
final Call<ClassBeans<DaoBean>> list = serverApi.list(10, 1);
list.enqueue(new Callback<ClassBeans<DaoBean>>() {
@Override
public void onResponse(Call<ClassBeans<DaoBean>> call, Response<ClassBeans<DaoBean>> response) {
ClassBeans<DaoBean> classBeans=response.body();
for (DaoBean bean:response.body().getResults()) {
dao.insert(bean);
}
List<DaoBean> results = classBeans.getResults();
Log.e("TAG",results+"");
rv.setAdapter(new RvAdapter(getContext(),results));
}
@Override
public void onFailure(Call<ClassBeans<DaoBean>> call, Throwable t) {
}
});
return view;
}
}
RecyclerView的适配器
public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<DaoBean> list;
public RvAdapter(Context context, List<DaoBean> list) {
this.context = context;
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder holder1 = (MyViewHolder) holder;
DaoBean daoBean = list.get(position);
List<String> images = daoBean.getImages();
if (images != null){
holder1.sdv.setImageURI(images.get(0));
}
holder1.tv1.setText(daoBean.getDesc());
holder1.tv2.setText(daoBean.getWho());
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView sdv;
TextView tv1;
TextView tv2;
public MyViewHolder(View itemView) {
super(itemView);
sdv = itemView.findViewById(R.id.sdv);
tv1 = itemView.findViewById(R.id.tv1);
tv2 = itemView.findViewById(R.id.tv2);
}
}
}
依赖包
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'org.greenrobot:greendao:3.2.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
apply plugin: 'org.greenrobot.greendao'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'