RecycierView 点击条目 Eventbus传值给第二个activity,吐司展示

效果图


首页RecycierView 点击条目 Eventbus传值给第二个activity,吐司展示

Retrofit的post方式展示recyclerview,fresco加载图片,添加到数据库greendao,

点击条目发送Eventbus黏性事件给SecondActivity,吐司展示字段

涉及到了greendao,在工程的gradle里面加入两行(蓝色的)

buildscript {
    
    repositories {
        google()
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
在项目的gradle里面做更改,并且导入依赖(标红的)

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
    compileSdkVersion 26



    defaultConfig {
        applicationId "com.example.exercise_05_retrofit_greendao_eventbus_fresco"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}
greendao {
    targetGenDir 'src/main/java'
    daoPackage 'com.example.exercise_05_retrofit_greendao_eventbus_fresco.dao'// 自己的包名.dao
    schemaVersion 1
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

   //butterknife两个依赖
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

     //retrofit的两个依赖
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'

    //eventbus的依赖
    compile 'org.greenrobot:eventbus:3.1.1'
    //fresco的依赖 
    compile 'com.facebook.fresco:fresco:1.5.0'

    //greendao两个依赖
    compile 'org.greenrobot:greendao:3.2.2'
    compile 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
     //recyclerview依赖
    compile 'com.android.support:recyclerview-v7:25.3.1'

 }
新建IApplication 继承Application ,并在清单文件中配置

public class IApplication extends Application
<application
        android:name=".appli.IApplication"

清单文件中加入权限

 <uses-permission android:name="android.permission.INTERNET" />

请求网络获得的数据生成实体类bean(标红的需要写)

@Entity//必须写的
public class ListBean {
           
@Id(autoincrement =true)//自增
private Long id;//自己加的字段
private String icon;
private String name;
private int pcid;
private int pscid;
点击锤子按钮 会生成dao下面的三个类

新建接口GetDataService ,这里提供了两种方法,get传参 post传参

public interface GetDataService {
    /**
     * post请求
     * https://www.zhaoapi.cn/product/getProductCatagory?cid=1
     */
    @FormUrlEncoded
    @POST("/product/getProductCatagory")
   Call<OldBean> post(@Field("cid") String cid);

    /**
     * get请求
     * https://www.zhaoapi.cn/product/getProductCatagory?cid=1
     */
    @GET("/product/getProductCatagory")
    Call<OldBean> get(@Query("cid") String cid);
}

IApplication里面的一系列初始化配置

public class IApplication extends Application{

    public static GetDataService service;
    public static DaoSession session;

    @Override
    public void onCreate() {
        super.onCreate();
        //一系列的初始化配置

        //1.fresco的初始化配置
        Fresco.initialize(this);

        //2.retrofit的初始化
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://www.zhaoapi.cn")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        //操作网络请求的对象
        service = retrofit.create(GetDataService.class);


        //3.初始化greendao
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"tablename");

        Database database = helper.getWritableDb();

        //new出session
        session = new DaoMaster(database).newSession();

    }
}
使用MVP ,此处省略了presenter层,model层里面调用IApplication类的请求网络

public class MyModel {

  //请求网络数据
    public void getData(final ModelCallBack modelCallBack) {
        //调用application里面的请求网络的对象
        //传接口后面拼接的参数 key的值 ,,,post
      /*  Call<OldBean> call = IApplication.service.post("1");

        call.enqueue(new Callback<OldBean>() {
            @Override
            public void onResponse(Call<OldBean> call, Response<OldBean> response) {
                //response.body 就是一个bean对象了,不需要解析了
                OldBean oldBean = response.body();
                modelCallBack.success(oldBean);

              *//*  //在这里 就已经添加到了数据库,在view层查询数据库展示recyview
                //调用iapplication里面的数据库的对象
                IApplication.session.getListBeanDao().insertInTx(oldBean.getResult().getList());*//*
            }

            @Override
            public void onFailure(Call<OldBean> call, Throwable t) {
                modelCallBack.failure(new Exception(""));
            }
        });*/

        //-------------------------
        //传接口后面拼接的参数 key的值 ,,,get
        Call<OldBean> call = IApplication.service.get("2");

        call.enqueue(new Callback<OldBean>() {
            @Override
            public void onResponse(Call<OldBean> call, Response<OldBean> response) {
                //response.body 就是一个bean对象了,不需要解析了
                OldBean oldBean = response.body();
                modelCallBack.success(oldBean);

              /*  //在这里 就已经添加到了数据库,在view层查询数据库展示recyview
                //调用iapplication里面的数据库的对象
                IApplication.session.getListBeanDao().insertInTx(oldBean.getResult().getList());*/
            }

            @Override
            public void onFailure(Call<OldBean> call, Throwable t) {
                modelCallBack.failure(new Exception(""));
            }
        });
    }
}

回调到view层MainActivity

public class MainActivity extends AppCompatActivity implements ViewCallBack{

    @BindView(R.id.recy_view)
    RecyclerView recyView;
    private MyPresenter myPresenter;
    private RecyAdapter recyAdapter;

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

        myPresenter = new MyPresenter(this);
        myPresenter.getData();

        recyView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

        recyAdapter = new RecyAdapter(this);

        recyView.setAdapter(recyAdapter);
    }

    @Override
    public void success(OldBean oldBean) {
        //在这里 就已经添加到了数据库,在view层查询数据库展示recyview
        //调用iapplication里面的数据库的对象
        IApplication.session.getListBeanDao().insertInTx(oldBean.getData().get(0).getList());

        //添加完查询
        List<ListBean> list = IApplication.session.getListBeanDao().loadAll();

        //查询打印出来
        for(ListBean bean:list){
            System.out.println(bean.toString());
        }
       recyAdapter.addData(list);//将从数据库里查询出的数据展示出来
//       recyAdapter.addData(oldBean.getData().get(0).getList());//直接展示
    }

    @Override
    public void failure(Exception e) {

    }
}
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.exercise_05_retrofit_greendao_eventbus_fresco.MainActivity">

  <android.support.v7.widget.RecyclerView
      android:id="@+id/recy_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

</LinearLayout>
recy_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:layout_height="match_parent">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/recy_simple_view"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <TextView
        android:layout_marginLeft="20dp"
        android:textSize="23sp"
        android:id="@+id/recy_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
recy的适配器RecyAdapter里面

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.MyViewHolder> {


    private List<ListBean> listDa;
    Context context;

    public RecyAdapter(Context context) {
        this.context = context;
    }

    //添加数据的方法
    public void addData(List<ListBean> list) {
        if (listDa == null) {
            listDa = new ArrayList<>();
        }
        listDa.addAll(list);
        notifyDataSetChanged();
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        holder.recySimpleView.setImageURI(listDa.get(position).getIcon());
        holder.recyText.setText(listDa.get(position).getName());

        //条目点击事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //eventbus传递黏性事件给mainactivity2
                //传一个eventbusbean对象过去
                EventBusBean eventBusBean = new EventBusBean(listDa.get(position).getName());
                EventBus.getDefault().postSticky(eventBusBean);
                //跳转
           context.startActivity(new Intent(context, SecondActivity.class));


            }
        });
    }

    @Override
    public int getItemCount() {
        return listDa == null ? 0 : listDa.size();
    }

    static class MyViewHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.recy_simple_view)
        SimpleDraweeView recySimpleView;
        @BindView(R.id.recy_text)
        TextView recyText;

        MyViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }


}

Eventbus新建EventBusBean类传值

public class EventBusBean {
    private String name;

    public EventBusBean(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

recyadapter的itemView点击事件里面,Eventbus发布一个黏性事件

public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.recySimpleView.setImageURI(listDa.get(position).getIcon());
    holder.recyText.setText(listDa.get(position).getName());

    //条目点击事件
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //eventbus传递黏性事件给mainactivity2
            //传一个eventbusbean对象过去
            EventBusBean eventBusBean = new EventBusBean(listDa.get(position).getName());
            EventBus.getDefault().postSticky(eventBusBean);
            //跳转
       context.startActivity(new Intent(context, SecondActivity.class));

}
    });
SecondActivity里面注册黏性事件,并吐司,取消注册

public class SecondActivity extends AppCompatActivity {

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

        //这里面注册eventbus
        EventBus.getDefault().register(this);
    }

    //接收订阅 ,,参数是bean
    @Subscribe(sticky=true)
    public void event(EventBusBean eventBusBean){
        Toast.makeText(this,eventBusBean.getName(),Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值