搜索框,流式布局,Xbanner,数据库

这篇博客详细介绍了Android应用的开发过程,包括使用API、Model层设计、Presenter实现,以及MainActivity的操作。文章还讨论了如何实现流式布局(FlowLayout)和点击事件,调用西红柿功能,并通过菜单跳转到详情页面。此外,作者还探讨了自定义适配器的使用和数据库person表的操作,最后介绍了一个名为MyManager的管理类。
摘要由CSDN通过智能技术生成

工具类

 //1.连接地址
    private static String BASE_URL="https://apis.juhe.cn/";
    private Retrofit retrofit;

    //2.私有方法
    private static class SingleHolder{
        private static  final RetrofitManager INSTSENCE=new RetrofitManager(BASE_URL);
    }

    //3.
    private RetrofitManager(String baseUrl) {
      retrofit=new Retrofit.Builder()
              .baseUrl(baseUrl)
              .addConverterFactory(GsonConverterFactory.create())
              .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
              .client(buildOkHttpClient())
              .build();

    }

    //4.
    private OkHttpClient buildOkHttpClient() {
        return  new OkHttpClient.Builder()
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .readTimeout(5000,TimeUnit.MILLISECONDS)
                .writeTimeout(5000,TimeUnit.MILLISECONDS)
                .build();
    }


    //5.公共方法
    public static RetrofitManager getDefault(){
        return SingleHolder.INSTSENCE;
    }

    //6.
    public<T> T creat(Class<T> clazz){
        return  retrofit.create(clazz);
    }


}



一,API

@GET("")
Observable<HomeBean> menue(@Url String url);

二,Model

public Observable<HomeBean> menu(String url){
    return RetrofitManager.getDefault().creat(HomeApi.class).menue(url);
}

三,Presenter

public class HomePresenter extends BasePresenter<HomeView> {

    private HomeModel homeModel;

    public HomePresenter(HomeView view) {

        super(view);
    }

    @Override
    protected void initModel() {

        homeModel = new HomeModel();
    }

    public void menue(String menu){
        homeModel.menu(HttpConfig.urk+menu)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<HomeBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        compositeDisposable.add(d);
                    }

                    @Override
                    public void onNext(HomeBean homeBean) {
                           if(view!=null){
                               view.getSuccess(homeBean);
                           }
                    }

                    @Override
                    public void onError(Throwable e) {
                      if(view!=null){
                          view.getError(e.toString());
                      }
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }


}

四,MainActivity

public class MainActivity extends BaseActivity<HomePresenter> implements HomeView, View.OnClickListener {
    private static final String TAG = "MainActivity=====";
    private EditText editText;
    private Button button,button_clear;
    private FlowLayout flowLayout;


    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {

    }

    @Override
    protected void initview() {
        editText = findViewById(R.id.edittext);
        button = findViewById(R.id.button1);
        button_clear=findViewById(R.id.button2);
        flowLayout = findViewById(R.id.flowlayout);

        button.setOnClickListener(this);
        button_clear.setOnClickListener(this);
    }

    @Override
    protected HomePresenter presenterById() {
        return presenter = new HomePresenter(this);
    }

    @Override
    protected int setView() {
        return R.layout.activity_main;
    }

    @Override
    public void getSuccess(HomeBean homeBean) {

        Log.d(TAG, "首页成功: "+homeBean);
        Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void getError(String e) {
        Log.d(TAG, "首页失败: "+e.toString());
        Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show();
    }

    @Override
    public Context context() {
        return this;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button1:
                       String content=editText.getText().toString();
                       if(TextUtils.isEmpty(content)){
                           Toast.makeText(MainActivity.this, "main不能为空", Toast.LENGTH_SHORT).show();
                       }else{
                           TextView textView = new TextView(this);
                           textView.setText(content);
                           textView.setTextColor(Color.BLACK);
                           textView.setPadding(10, 10, 10, 10);
                           flowLayout.addView(textView);
                           presenter.menue(content);
                           Intent intent = new Intent(MainActivity.this,MenuActivity.class);
                           intent.putExtra("name",content);
                           startActivity(intent);
                       }
                break;


            case R.id.button2:
                //清空全部内容
                button_clear.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       flowLayout.removeAllViews();
                    }
                });
                break;
        }
    }
}

五,点击调到西红柿

public class MenuActivity extends BaseActivity<HomePresenter> implements HomeView {


    private RecyclerView recyclerView;
    private MyAdapter myAdapter;
    private PresonDao presonDao;

    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {

    }

    @Override
    protected void initview() {
        recyclerView = findViewById(R.id.menu_recyc);
        Intent intent  = getIntent();
        String name = intent.getStringExtra("name");
        Toast.makeText(MenuActivity.this,name,Toast.LENGTH_LONG).show();
        presenter.menue(name);

        //获取pressonDao
        MyManager myManager = MyManager.getMyManager(MenuActivity.this);
        presonDao = myManager.getDaoSession().getPresonDao();
    }

    @Override
    protected HomePresenter presenterById() {

        return presenter = new HomePresenter(this);
    }

    @Override
    protected int setView() {
        return R.layout.activity_menu;
    }

    @Override
    public void getSuccess(HomeBean homeBean) {

        List<HomeBean.ResultBean.DataBean> data = homeBean.getResult().getData();
        myAdapter = new MyAdapter(MenuActivity.this,data);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
         recyclerView.setAdapter(myAdapter);


        //点击事件
        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(String title, List<HomeBean.ResultBean.DataBean.StepsBean> step, View view, int position) {
                ArrayList<String> pic=new ArrayList<>();
                ArrayList<String> stepq=new ArrayList<>();

                for (int i=0;i<step.size();i++){
                    String img = step.get(i).getImg();
                    String step1 = step.get(i).getStep();
                    pic.add(img);
                    stepq.add(step1);
                }
                Log.e("tag", "onItemClick:+++++++++++++ "+pic.size() );
                Intent it=new Intent(MenuActivity.this,XiangQing.class);

                it.putStringArrayListExtra("images",pic);
                it.putStringArrayListExtra("stepq",stepq);

                /*it.putExtra("title",title);*/
               presonDao.insert(new Preson(null, title));

                startActivity(it);
            }
        });


        //添加分割线
        DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
        //设置分割线的颜色
        dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.shape));
        recyclerView.addItemDecoration(dividerItemDecoration);
        }



    @Override
    public void getError(String e) {

    }

    @Override
    public Context context() {
        return context();
    }
}

六,菜单调到详情页面


public class XiangQing extends AppCompatActivity {

    private PresonDao presonDao;

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

    }

    private void initView() {
        presonDao = MyManager.getMyManager(XiangQing.this).getDaoSession().getPresonDao();
        Intent intent = getIntent();
        final ArrayList<String> images = intent.getStringArrayListExtra("images");
        ArrayList<String> stepq = intent.getStringArrayListExtra("stepq");
     /*   String title = intent.getStringExtra("title");*/
        Log.e("tag", "onCreate: "+images.size());
       /* Log.e("tag", "onCreate: "+title);*/
        List<Preson> list = presonDao.queryBuilder()
                .build().list();

        TextView textView =findViewById(R.id.xiang_qing_title);
        textView.setText(list.get(0).getCooName());
        XBanner mXBanner = (XBanner) findViewById(R.id.xbanner);
        mXBanner.setData(R.layout.image_fresco,images,stepq);
        //加载广告图片
        mXBanner.loadImage(new XBanner.XBannerAdapter() {
            @Override
            public void loadBanner(XBanner banner, Object model, View view, int position) {
                 //1、此处使用的Glide加载图片,可自行替换自己项目中的图片加载框架
                //2、返回的图片路径为Object类型,你只需要强转成你传输的类型就行,切记不要胡乱强转!
                SimpleDraweeView viewById = view.findViewById(R.id.image_sime);
                viewById.setImageURI(images.get(position));
            }
        });


    }
}

七,FlowLayout

public class FlowLayout extends ViewGroup {
    public FlowLayout(Context context) {
        super(context);
    }

    public FlowLayout(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //测量所有孩子的宽高
        measureChildren(widthMeasureSpec, heightMeasureSpec);

        int widthSize = MeasureSpec.getSize(widthMeasureSpec);//AT-MOST
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);

     

        setMeasuredDimension(widthSize, heightSize);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int lineWidth = 0;
        int totalHeight = 0;//累加的高度
        View childView;
        int childWidth = 0;
        int childHeight = 0;


        for (int i = 0; i < getChildCount(); i++) {
            childView = getChildAt(i);
            childWidth = childView.getMeasuredWidth();
            childHeight = childView.getMeasuredHeight();


            //测量布局的宽
            //换行/不换行
            if (childWidth + lineWidth > getMeasuredWidth()) {
                //换行
                totalHeight += childHeight;
                lineWidth = 0;
                childViewLayout(childView, lineWidth, totalHeight, lineWidth + childWidth, totalHeight + childHeight);
                //第一个
                lineWidth = childWidth;
            } else {
                //不换行
                childViewLayout(childView, lineWidth, totalHeight, lineWidth + childWidth, totalHeight + childHeight);

                lineWidth += childWidth;


            }
        }
    }

    private void childViewLayout(View childView, int lineWidth, int totalHeight, int i, int i1) {
        childView.layout(lineWidth, totalHeight, i, i1);
    }
}

八,适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
    private Context context;
    private List<HomeBean.ResultBean.DataBean> list;
    private static final String TAG = "MyAdapter";
    public MyAdapter(Context context, List<HomeBean.ResultBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.adapter, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
        List<HomeBean.ResultBean.DataBean.StepsBean> steps = list.get(position).getSteps();

        List<String> albums = list.get(position).getAlbums();

        holder.simpleDraweeView.setImageURI(albums.get(0));

        Log.d(TAG, "8888888888888: "+list.get(position).getTitle());
        holder.textView1.setText(list.get(position).getTitle());
        holder.textView2.setText(list.get(position).getTags());


        holder.simpleDraweeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                String title = list.get(position).getTitle();

                List<HomeBean.ResultBean.DataBean.StepsBean> steps = list.get(position).getSteps();

                onItemClickListener.onItemClick(title,steps,v,position);

                if(onItemClickListener!=null){

                    onItemClickListener.onItemClick(title,steps,v,position);

                }
            }
        });

    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private SimpleDraweeView simpleDraweeView;
        private TextView textView1,textView2;
        public MyViewHolder(View itemView) {
            super(itemView);
            simpleDraweeView=itemView.findViewById(R.id.simpledrawee);
            textView1=itemView.findViewById(R.id.title1);
            textView2=itemView.findViewById(R.id.title2);
        }
    }


    private OnItemClickListener onItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(String title,List<HomeBean.ResultBean.DataBean.StepsBean> step,View view, int position);
    }
}

九  数据库person

@Entity(nameInDb = "preson")
public class Preson {
    @Id(autoincrement = true)
    private  Long id;
    private String CooName;
    @Generated(hash = 1426502220)
    public Preson(Long id, String CooName) {
        this.id = id;
        this.CooName = CooName;
    }
    @Generated(hash = 1290113423)
    public Preson() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCooName() {
        return this.CooName;
    }
    public void setCooName(String CooName) {
        this.CooName = CooName;
    }
}

十,MyManager

public class MyManager {
         private static MyManager myManager;
         private  DaoSession daoSession;

    private MyManager(Context context) {
              this.daoSession= DaoMaster.newDevSession(context,"my.db");
    }

    public static  MyManager getMyManager(Context context) {
        if (myManager == null){
              synchronized (MyManager.class){
                      if (myManager == null){
                             myManager=new MyManager(context);
                      }
              }
        }

        return myManager;
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值