Xrecycleview上下刷新 点击换颜色

本文介绍了一个Android应用中实现主题切换功能的方法,并展示了如何使用Retrofit进行网络请求获取不同类型的新闻数据,同时实现了数据的分页加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/////////////////////////////////////////////////////////
package com.example.app2;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.app2.activity.ZhutiQH;
import com.example.app2.fragment.One;
import com.example.app2.fragment.Three;
import com.example.app2.fragment.Two;
import com.hjm.bottomtabbar.BottomTabBar;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

public class MainActivity extends AppCompatActivity {

    private BottomTabBar mb;
    private TextView zhuti;
    private RelativeLayout re;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //注册EventBus
        EventBus.getDefault().register(this);
        re =(RelativeLayout)findViewById(R.id.re);
        SharedPreferences kai = getSharedPreferences("Kai", MODE_PRIVATE);
        int laicolor = kai.getInt("kaicolor", 0);
        if(laicolor!=0){
            re.setBackgroundColor(laicolor);
        }

        mb =(BottomTabBar)findViewById(R.id.bottom_tab_bar);
        zhuti =(TextView) findViewById(R.id.zhuti);

        mb.init(getSupportFragmentManager())
                .setImgSize(50,50)
                .setFontSize(15)
                .setTabPadding(4,6,10)
                .setChangeColor(Color.RED,Color.DKGRAY)
                .addTabItem("Home",R.drawable.bottom_home, One.class)
                .addTabItem("Read",R.drawable.bottom_read, Two.class)
                .addTabItem("Me",R.drawable.bottom_me, Three.class)
                .isShowDivider(false)
                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
                    @Override
                    public void onTabChange(int position, String name) {

                    }
                });
        //点击跳转到切换主题页
        zhuti.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, ZhutiQH.class);
                startActivity(intent);
            }
        });
    }

    //接收
    @Subscribe
    public void onEventMainThread(Object event) {
        int a= (int) event;
        re.setBackgroundColor(a);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);//反注册EventBus
    }
}
////////////////////////////////////////////////////////////////
package com.example.app2.activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.app2.R;
import org.greenrobot.eventbus.EventBus;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class ZhutiQH extends AppCompatActivity {

    @BindView(R.id.btn1)
    Button btn1;
    @BindView(R.id.btn2)
    Button btn2;
    @BindView(R.id.btn3)
    Button btn3;
    @BindView(R.id.btn4)
    Button btn4;
    @BindView(R.id.btn5)
    Button btn5;
    private RelativeLayout zhutiqh;
    private TextView fanhui;
    private int color=0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhuti_qh);
        ButterKnife.bind(this);
        zhutiqh = (RelativeLayout) findViewById(R.id.zhutiqh);
        fanhui = (TextView) findViewById(R.id.fanhui);

        SharedPreferences kai = getSharedPreferences("Kai", MODE_PRIVATE);
        int laicolor = kai.getInt("kaicolor", 0);
        if(laicolor!=0){
            zhutiqh.setBackgroundColor(laicolor);
        }

        fanhui.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    @OnClick({R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                color = getResources().getColor(R.color.colorLv);
                zhutiqh.setBackgroundColor(color);
                break;
            case R.id.btn2:
                color = getResources().getColor(R.color.colorLan);
                zhutiqh.setBackgroundColor(color);
                break;
            case R.id.btn3:
                color = getResources().getColor(R.color.colorHong);
                zhutiqh.setBackgroundColor(color);
                break;
            case R.id.btn4:
                color = getResources().getColor(R.color.colorHuang);
                zhutiqh.setBackgroundColor(color);
                break;
            case R.id.btn5:
                color = getResources().getColor(R.color.colorShenLan);
                zhutiqh.setBackgroundColor(color);
                break;
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().post(color);

        SharedPreferences kai = getSharedPreferences("Kai", MODE_PRIVATE);
        SharedPreferences.Editor edit = kai.edit();
        edit.putInt("kaicolor",color);
        edit.commit();
    }
}
/////////////////////////////////////////////////////////////////////三秒跳转
package com.example.app2.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.example.app2.MainActivity;
import com.example.app2.R;
import java.util.Timer;
import java.util.TimerTask;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //主页图片的timer计时器 跳转
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Intent intent = new Intent(Main2Activity.this, MainActivity.class);
                startActivity(intent);
            }
        },2000);
    }
}
///////////////////////////////////////////////////////////////带Intent值跳转
package com.example.app2.adapter;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.example.app2.R;
import com.example.app2.activity.MeinvTu;
import com.example.app2.bean.FuliBean;
import java.util.List;

/**
 * Created by 
 */

public class FuliAdapter extends RecyclerView.Adapter<FuliAdapter.ViewHolder> {

    private Context context;
    private List<FuliBean.ResultsBean> list;

    public FuliAdapter(Context context, List<FuliBean.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private final ImageView img;
        public ViewHolder(View itemView) {
            super(itemView);
            img =itemView.findViewById(R.id.img);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.fuli, null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        Glide.with(context).load(list.get(position).getUrl()).into(holder.img);
        holder.img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, MeinvTu.class);
                intent.putExtra("imga",list.get(position).getUrl());
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}
//////////////////////////////////////////////////////////////点击美女之后跳转
package com.example.app2.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.example.app2.R;

//福利里面点击的放大图片
public class MeinvTu extends AppCompatActivity {

    private ImageView meinv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_meinv_tu);
        meinv =(ImageView)findViewById(R.id.meinv);
        Intent intent = getIntent();
        String imga = intent.getStringExtra("imga").toString();
        Glide.with(this).load(imga).into(meinv);

        ScaleAnimation animation =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
         Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        animation.setDuration(5000);//设置动画持续时间
        meinv.setAnimation(animation);
    }
}

///////////////////////////////////////////////////////////////工具类
package com.example.app2.utils;
import com.example.app2.service.ApiService;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by 
 */

public class RetrofitUtils {
    private  static  volatile RetrofitUtils instance;
    private final ApiService apiService;

    private RetrofitUtils(){
        Retrofit retrofit=new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl("http://gank.io/api/")
                .client(new OkHttpClient.Builder().build())
                .build();
        apiService = retrofit.create(ApiService.class);
    }
    public static  RetrofitUtils getInstance(){
        if (instance==null){
            synchronized (RetrofitUtils.class){
                if (null==instance){
                    instance=new RetrofitUtils();
                }
            }
        }
        return  instance;
    }

    public ApiService getApiService(){
        return  apiService;    }
}
/////////////////////////////////////////////////////////////////
package com.example.app2.service;
import com.example.app2.bean.AndroidBean;
import com.example.app2.bean.FuliBean;
import com.example.app2.bean.TwoBean;
import io.reactivex.Flowable;
import retrofit2.http.GET;
import retrofit2.http.Path;

/**
 * Created by
 */

public interface ApiService {
    @GET("data/Android/10/{as}")
    Flowable<AndroidBean> getNews(@Path("as") String string);

    @GET("data/iOS/20/{as}")
    Flowable<AndroidBean> getFuli(@Path("as") String string);

    @GET("data/福利/10/{as}")
    Flowable<FuliBean> getMeinv(@Path("as") String string);

    @GET("data/all/20/{as}")
    Flowable<TwoBean> getTwo(@Path("as") String string);
}

/////////////////////////////////////////////////////////
package com.example.app2.presenter;

/**
 * Created by 
 */

public interface BasePersenter {
    void getData(String map,String tag);
}
////////////////////////////////////////////////////////
package com.example.app2.presenter;
import com.example.app2.bean.AndroidBean;
import com.example.app2.bean.FuliBean;
import com.example.app2.bean.TwoBean;
import com.example.app2.iview.Iview;
import com.example.app2.model.Imodel;
import com.example.app2.model.NewsModel;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subscribers.DisposableSubscriber;

/**
 * Created 
 */

public class NewsPersenter implements BasePersenter {
    private Iview iv;
    private DisposableSubscriber subscriber;
    public  void attacView(Iview iv){
        this.iv=iv;
    }

    public void detachView(){
        if (iv!=null){
            iv=null;
        }
        if (subscriber!=null){//rxjava的防止内存泄漏
            if (!subscriber.isDisposed()){
                subscriber.isDisposed();
            }
        }
    }

    @Override
    public void getData(String map, String tag) {
        Imodel model=new NewsModel(this);//多态  this是当前的p层、
        model.getData(map,tag);
    }

    public void getNews(Flowable<AndroidBean> news,final String tag){
        news.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<AndroidBean>() {
                    @Override
                    public void onNext(AndroidBean dabean) {
                            iv.OnSuccess(dabean,tag);
                    }

                    @Override
                    public void onError(Throwable t) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

}
    public void getFuli(Flowable<AndroidBean> fuli,final String tag) {
        fuli.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<AndroidBean>() {
                    @Override
                    public void onNext(AndroidBean dabean) {
                        iv.OnSuccess(dabean, tag);
                    }

                    @Override
                    public void onError(Throwable t) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    public void getMeinv(Flowable<FuliBean> meinv, final String tag) {
        meinv.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
               .subscribeWith(new DisposableSubscriber<FuliBean>() {
                   @Override
                   public void onNext(FuliBean fuliBean) {
                       iv.OnSuccess(fuliBean, tag);
                   }

                   @Override
                   public void onError(Throwable t) {

                   }

                   @Override
                   public void onComplete() {

                   }
               });
    }

    public void getTwo(Flowable<TwoBean> two, final String tag) {
        two.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
               .subscribeWith(new DisposableSubscriber<TwoBean>() {
                   @Override
                   public void onNext(TwoBean twoBean) {
                       iv.OnSuccess(twoBean, tag);
                   }

                   @Override
                   public void onError(Throwable t) {

                   }

                   @Override
                   public void onComplete() {

                   }
               });
    }
}
////////////////////////////////////////////////////////////
package com.example.app2.model;

/**
 * Created by
 */

public interface Imodel {
    void getData(String map, String tag);
}
///////////////////////////////////////////////////////////
package com.example.app2.model;
import com.example.app2.bean.AndroidBean;
import com.example.app2.bean.FuliBean;
import com.example.app2.bean.TwoBean;
import com.example.app2.presenter.NewsPersenter;
import com.example.app2.utils.RetrofitUtils;
import io.reactivex.Flowable;

/**
 * Created by 
 */

public class NewsModel implements Imodel {
    private NewsPersenter presenter;

    public NewsModel(NewsPersenter presenter){
        this.presenter=presenter;
    }

    @Override
    public void getData(String map, String tag) {
        if (tag.equals("Android")) {
            Flowable<AndroidBean> news = RetrofitUtils.getInstance().getApiService().getNews(map);
            presenter.getNews(news,tag);
        }else if(tag.equals("iOS")){
            Flowable<AndroidBean> news = RetrofitUtils.getInstance().getApiService().getFuli(map);
            presenter.getFuli(news,tag);
        }else if(tag.equals("福利")){
            Flowable<FuliBean> news = RetrofitUtils.getInstance().getApiService().getMeinv(map);
            presenter.getMeinv(news,tag);
        }else if(tag.equals("Two")){
            Flowable<TwoBean> news = RetrofitUtils.getInstance().getApiService().getTwo(map);
            presenter.getTwo(news,tag);
        }
    }
}
///////////////////////////////////////////////////////////////////
package com.example.app2.iview;

/**
 * Created by 
 */

public interface Iview {
    void OnSuccess(Object o,String tag);
    void OnFailed(Exception e,String tag);
}
///////////////////////////////////////////////////////////////////
package com.example.app2.fragment2;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.app2.R;
import com.example.app2.adapter.AndroidAdapter;
import com.example.app2.bean.AndroidBean;
import com.example.app2.iview.Iview;
import com.example.app2.presenter.NewsPersenter;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by
 */

public class One2 extends Fragment implements Iview{

    private NewsPersenter presenter;
    private XRecyclerView android_rv;
    private AndroidAdapter adapter;
    private List<AndroidBean.ResultsBean> results = new ArrayList<>();
    private int count=1;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.one2, container, false);
        android_rv =view.findViewById(R.id.android_rv);

        //t添加刷新权限
        android_rv.setLoadingMoreEnabled(true);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        presenter = new NewsPersenter();
        presenter.attacView(this);
        presenter.getData("1","Android");

        LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        android_rv.setLayoutManager(manager);
    }

    @Override
    public void OnSuccess(Object o, String tag) {

        if (tag.equals("Android")) {
            AndroidBean bean = (AndroidBean) o;
            List<AndroidBean.ResultsBean> results1 = bean.getResults();
            results.addAll(results1);

            adapter = new AndroidAdapter(getActivity(), this.results);
            android_rv.setAdapter(adapter);

            //刷新与加载
            android_rv.setLoadingListener(new XRecyclerView.LoadingListener() {
                @Override
                public void onRefresh() {
                    //开启主线程
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            results.clear();
                            presenter.getData("1","Android");
                            adapter.notifyDataSetChanged();
                            android_rv.refreshComplete();
                        }
                    });

                }

                @Override
                public void onLoadMore() {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            count=count+1;
                            presenter.getData(count+"","Android");
                            adapter.notifyDataSetChanged();
                            android_rv.loadMoreComplete();
                        }
                    });
                }
            });
        }
    }

    @Override
package com.example.app2.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.app2.R;
import com.example.app2.bean.AndroidBean;

import java.util.List;

/**
 * Created by 柴晓凯 on 2017/12/18.
 */

public class AndroidAdapter extends RecyclerView.Adapter<AndroidAdapter.ViewHolder>{

    private Context context;
    private List<AndroidBean.ResultsBean> list;

    public AndroidAdapter(Context context, List<AndroidBean.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private final ImageView img1;
        private final TextView time;
        private final TextView title;

        public ViewHolder(View itemView) {
            super(itemView);
            img1=(ImageView)itemView.findViewById(R.id.img);
            time =(TextView)itemView.findViewById(R.id.time);
            title =(TextView)itemView.findViewById(R.id.title);
        }
    }

    @Override
    public AndroidAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.android, null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(AndroidAdapter.ViewHolder holder, int position) {
        final List<String> images = list.get(position).getImages();
        if(images!=null){
            Glide.with(context).load(images.get(0).toString()).into(holder.img1);
        }else{
            Glide.with(context).load("http://www.cndog.net/tpb/2013-12/14/14970-6031.jpg").into(holder.img1);
        }
        holder.title.setText(list.get(position).getDesc());
        holder.time.setText(list.get(position).getCreatedAt());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}
public void OnFailed(Exception e, String tag) { } //防止内存泄漏 @Override public void onDestroy() { super.onDestroy(); if (presenter!=null){ presenter.detachView(); } }}
/////////////////////////////////////////////////////////判断是否有图片  适配器
package com.example.app2.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.app2.R;
import com.example.app2.bean.AndroidBean;
import java.util.List;

/**
 * Created by 
 */

public class AndroidAdapter extends RecyclerView.Adapter<AndroidAdapter.ViewHolder>{

    private Context context;
    private List<AndroidBean.ResultsBean> list;

    public AndroidAdapter(Context context, List<AndroidBean.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private final ImageView img1;
        private final TextView time;
        private final TextView title;

        public ViewHolder(View itemView) {
            super(itemView);
            img1=(ImageView)itemView.findViewById(R.id.img);
            time =(TextView)itemView.findViewById(R.id.time);
            title =(TextView)itemView.findViewById(R.id.title);
        }
    }

    @Override
    public AndroidAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.android, null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(AndroidAdapter.ViewHolder holder, int position) {
        final List<String> images = list.get(position).getImages();
        if(images!=null){
            Glide.with(context).load(images.get(0).toString()).into(holder.img1);
        }else{
            Glide.with(context).load("http://www.cndog.net/tpb/2013-12/14/14970-6031.jpg").into(holder.img1);
        }
        holder.title.setText(list.get(position).getDesc());
        holder.time.setText(list.get(position).getCreatedAt());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值