题目要求

  1. 实现图1界面效果,用户下拉刷新,上拉加载,能够加载更多数据,图片处理框架进行缓存设置,向左侧拉,可以拉出侧拉菜单
  2. 点击图1影片的条目,可以跳转到图2的界面,这里图1要把条目对应的电影ID传到图2,图2拿到电影ID正常请求网络,会得到条目里电影的详细数据

提示:图1是一个Activity,图2也是一个Activity,要进行BaseActivity的抽取

  • 效果图

界面1

BaseActivity抽取和点击条目展示电影的简介

界面2BaseActivity抽取和点击条目展示电影的简介

 

  • 技术选型
  1. Imageloader
  2. Pulltorefresh
  3. HttpURLConnection
  4. AsyncTask或者handler
  5. drawlayout/slidingmenu
  6. 基类的抽取
  • 接口(请求方式都是GET)

查询正在上映电影列表:

http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList

BaseActivity抽取和点击条目展示电影的简介

根据电影ID查询电影信息:

http://172.17.8.100/movieApi/movie/v1/findMoviesById

BaseActivity抽取和点击条目展示电影的简介

 

下面开始代码

布局省略

baseActivity基类

package com.example.xxx.zkc3.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //初始化布局
        setContentView(initContentView());
        //控件
        initView();
        //数据
        initData();

    }

    protected abstract void initData();

    protected abstract int initContentView();
    protected abstract void initView();

}

MainActivity

AsyncTask+HttpUrlConnection获取网络数据用XListview加载

package com.example.xxx.zkc3;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;

import com.example.mylibrary.me.maxwin.view.XListView;
import com.example.xxx.zkc3.activity.BaseActivity;
import com.example.xxx.zkc3.activity.Main2Activity;
import com.example.xxx.zkc3.adapter.MAdapter;
import com.example.xxx.zkc3.bean.Movies;
import com.example.xxx.zkc3.util.HttpUtil;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.Date;

public class MainActivity extends BaseActivity {
   private DrawerLayout drawer;
   private ActionBarDrawerToggle toggle;
   private XListView xlv;
   private ArrayList<Movies.ResultBean> movies;
   private MAdapter ma;
   int page=1;
   int count=10;

    @Override
    protected void initData() {
        //初始化ActionBar
        initActionBar();
        movies=new ArrayList<>();
        ma=new MAdapter(MainActivity.this);
        xlv.setAdapter(ma);
        //设置监听
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                page=1;
                loadData();
            }

            @Override
            public void onLoadMore() {
                loadData();
            }
        });
        canloadMore(true);
        loadData();
        xlv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("id",movies.get(position-1).getId());
                startActivity(intent);
            }
        });
    }

    //判断可以追加
    private void canloadMore(boolean b) {
        xlv.setPullLoadEnable(b);
    }

    private void loadData() {
        String path="http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?count="+count+"&page="+page;
        new AsyncTask<String,Void,ArrayList<Movies.ResultBean>>(){

            @Override
            protected ArrayList<Movies.ResultBean> doInBackground(String... strings) {
                String textString=HttpUtil.getHttpUrl(strings[0]);
                Movies movies=new Gson().fromJson(textString,Movies.class);
                return movies==null?null: (ArrayList<Movies.ResultBean>) movies.getResult();
            }

            @Override
            protected void onPostExecute(ArrayList<Movies.ResultBean> resultBeans) {
                super.onPostExecute(resultBeans);
                updateData(resultBeans);
                completedData();
                canloadMore(resultBeans.size()==count);

                Log.e("sdf", movies.size()+"" );
            }
        }.execute(path);
    }

    private void completedData() {
        page++;
        xlv.stopLoadMore();
        xlv.stopRefresh();
    }

    private void updateData(ArrayList<Movies.ResultBean> resultBeans) {
        if(page==1){
            xlv.setRefreshTime(new Date().toLocaleString());
            ma.setData(resultBeans);
            movies.clear();
            movies.addAll(resultBeans);
        } else {
            movies.addAll(resultBeans);
            ma.addData(resultBeans);
        }
    }
   //重写基类的布局方法
    @Override
    protected int initContentView() {
        return R.layout.activity_main;
    }

    //侧拉菜单
    protected void initActionBar() {
        drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        ActionBar actionBar=getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        toggle=new ActionBarDrawerToggle(this,drawer,R.string.open,R.string.close);
        toggle.syncState();
        drawer.addDrawerListener(toggle);
    }
   //点击按钮展开侧拉
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(toggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
   //重写基类的initView方法
    protected void initView() {
        drawer=findViewById(R.id.drawer);
        xlv=findViewById(R.id.xlv);
    }
}

Main2Activity

package com.example.xxx.zkc3.activity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.AsyncTask;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.xxx.zkc3.R;
import com.example.xxx.zkc3.bean.Jianjie;
import com.example.xxx.zkc3.util.HttpUtil;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;


public class Main2Activity extends BaseActivity {
    int id;
    private TextView director;//导演
    private TextView duration;//时长
    private ImageView imageUrl;//图片
    private TextView name;//名字
    private TextView placeOrigin;//产地
    private TextView starring;//主演
    private TextView summary,summary2;//简介


    @Override
    protected void initData() {
        Intent intent=getIntent();
        //获得MainActivty传过来的id
        id=intent.getIntExtra("id",0);
        findMovies();
    }

    @Override
    protected int initContentView() {
        return R.layout.activity_main2;
    }

    @Override
    protected void initView() {
          director=findViewById(R.id.director);
         duration =findViewById(R.id.duration);
          imageUrl=findViewById(R.id.iv);
          name=findViewById(R.id.name);
        placeOrigin=findViewById(R.id.placeOrigin);
        starring=findViewById(R.id.starring);
        summary=findViewById(R.id.summary);
        summary2=findViewById(R.id.summary2);

    }

    @SuppressLint("StaticFieldLeak")
    private void findMovies() {
        String path="http://172.17.8.100/movieApi/movie/v1/findMoviesById?movieId="+id;
        new AsyncTask<String, Void, Jianjie.ResultBean>(){

            @Override
            protected Jianjie.ResultBean doInBackground(String... strings) {
                String textString=HttpUtil.getHttpUrl(strings[0]);
                Jianjie jianjie=new Gson().fromJson(textString,Jianjie.class);
                return jianjie.getResult();
            }

            @Override
            protected void onPostExecute(Jianjie.ResultBean resultBean) {
                super.onPostExecute(resultBean);
                //设置值给控件
                director.setText(resultBean.getDirector());
                duration.setText(resultBean.getDuration());
                ImageLoader.getInstance().displayImage(resultBean.getImageUrl(),imageUrl);
                name.setText(resultBean.getName());
                placeOrigin.setText(resultBean.getPlaceOrigin());
                starring.setText(resultBean.getStarring());
                summary.setText(resultBean.getSummary());
                summary2.setText(resultBean.getSummary());


            }
        }.execute(path);
    }
}

 

相关文章:

  • 2021-12-09
  • 2021-11-01
  • 2022-01-17
  • 2022-12-23
  • 2022-12-23
  • 2021-04-11
  • 2021-05-28
  • 2022-01-06
猜你喜欢
  • 2022-12-23
  • 2021-12-27
  • 2021-03-25
  • 2021-04-14
  • 2021-06-02
  • 2022-12-23
  • 2021-10-07
相关资源
相似解决方案