题目要求
- 实现图1界面效果,用户下拉刷新,上拉加载,能够加载更多数据,图片处理框架进行缓存设置,向左侧拉,可以拉出侧拉菜单
- 点击图1影片的条目,可以跳转到图2的界面,这里图1要把条目对应的电影ID传到图2,图2拿到电影ID正常请求网络,会得到条目里电影的详细数据
提示:图1是一个Activity,图2也是一个Activity,要进行BaseActivity的抽取
- 效果图
界面1
界面2
- 技术选型
- Imageloader
- Pulltorefresh
- HttpURLConnection
- AsyncTask或者handler
- drawlayout/slidingmenu
- 基类的抽取
- 接口(请求方式都是GET)
查询正在上映电影列表:
http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList
根据电影ID查询电影信息:
http://172.17.8.100/movieApi/movie/v1/findMoviesById
下面开始代码
布局省略
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);
}
}