11.菜单界面、详情界面
// 添加菜单
fl_menu=(FrameLayout) findViewById(R.id.fl_menu);
MenuHolder holder=new MenuHolder();
//登陆的时候数据保存起来了,在到了这里就判断有没有登陆过,这步还没写
//holder.setData(data)
fl_menu.addView(holder.getContentView());
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >
<!--ScollView 包裹的孩子 默认高度只能是包裹内容
android:fillViewport="true"允许孩子是匹配父容器 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
public class MenuHolder extends BaseHolder<UserInfo> implements OnClickListener {
@ViewInject(R.id.photo_layout)
private RelativeLayout photo_layout;
@ViewInject(R.id.image_photo)
private ImageView image_photo;
@ViewInject(R.id.user_name)
private TextView user_name;
@ViewInject(R.id.user_email)
private TextView user_email;
@Override
public View initView() {
View view=UiUtils.inflate(R.layout.menu_holder);
ViewUtils.inject(this, view);
photo_layout.setOnClickListener(this);
return view;
}
@Override
public void refreshView(UserInfo data) {
user_name.setText(data.getName());
user_email.setText(data.getEmail());
String url = data.getUrl();//image/user.png
bitmapUtils.display(image_photo, HttpHelper.URL+"image?name="+url);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.photo_layout:
// 连接服务器 ...登录
ThreadManager.getInstance().createLongPool().execute(new Runnable() {
@Override
public void run() {
UserProtocol protocol=new UserProtocol();
final UserInfo load = protocol.load(0);
UiUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
setData(load); // 当调用该方法的时候 就会调用refreshView
}
});
}
});
break;
}
}
}
{
"id": 1640273,
"name": "京东",
"packageName": "com.jingdong.app.mall",
"iconUrl": "app/com.jingdong.app.mall/icon.jpg",
"stars": 3,
"downloadNum": "1000万+",
"version": "3.6.3",
"date": "2014-06-13",
"size": 14282026,
"downloadUrl": "app/com.jingdong.app.mall/com.jingdong.app.mall.apk",
"des": "京东是中国最大的综合网购平台, 正品行货, 售后上门取件, 省钱又放心.商品品类覆盖家电,数码通讯,电脑,家居百货,服装服饰,母婴,图书,食品等12大类数万个品牌超百万种优质商品, 是网购用户首选.\n京东Android版是一款基于Android平台的网络购物软件,不仅具有下单,查询订单,搜索商品,晒单,产品评价等常用功能,还实现了手机版特有的“条码购”,“语音充值”,“物流实时跟踪”,“拍照晒单”等特色功能.\n主要功能简介:\n1.足不出户,百万商品任你选。热门促销,天天折扣享不停。\n2.支持语音搜索、语音充值、条码购物,解放你的双手,告别繁琐操作。\n3.商品一日三送,订单全程实时跟踪,一切尽在掌握。\n4.支持京东白条购物,可享受“先消费,后付款”的全新购物体验。更有灵活的分期付款方式可供选择,最长可分24期,享有超低的分期费率。\n5.支持扫码支付,通过京东客户端的“扫一扫”功能,扫描京东订单的二维码或条形码方式后跳转到支付页面进行付款。可以使用快捷,白条、小金库等方式付款。",
"author": "京东商城",
"screen": [
"app/com.jingdong.app.mall/screen0.jpg",
"app/com.jingdong.app.mall/screen1.jpg",
"app/com.jingdong.app.mall/screen2.jpg",
"app/com.jingdong.app.mall/screen3.jpg",
"app/com.jingdong.app.mall/screen4.jpg"
],
"safe": [
{
"safeUrl": "app/com.jingdong.app.mall/safeIcon0.jpg",
"safeDesUrl": "app/com.jingdong.app.mall/safeDesUrl0.jpg",
"safeDes": "已通过安智市场官方认证,是正版软件",
"safeDesColor": 0
},
{
"safeUrl": "app/com.jingdong.app.mall/safeIcon1.jpg",
"safeDesUrl": "app/com.jingdong.app.mall/safeDesUrl1.jpg",
"safeDes": "已通过安智市场安全检测,请放心使用",
"safeDesColor": 0
},
{
"safeUrl": "app/com.jingdong.app.mall/safeIcon2.jpg",
"safeDesUrl": "app/com.jingdong.app.mall/safeDesUrl2.jpg",
"safeDes": "无任何形式的广告",
"safeDesColor": 0
}
]
}
public class AppInfo {
private long id;
private String name;
private String packageName;
private String iconUrl;
private float stars;
private long size;
private String downloadUrl;
private String des;
//------------- 在DetailActivity 额外用到的数据
private String downloadNum;
private String version;
private String date;
private String author;
private List<String> screen;
private List<String> safeUrl;
private List<String> safeDesUrl;
private List<String> safeDes;
private List<Integer> safeDesColor;
public AppInfo(long id, String name, String packageName, String iconUrl,
float stars, long size, String downloadUrl, String des,
String downloadNum, String version, String date, String author,
List<String> screen, List<String> safeUrl, List<String> safeDesUrl,
List<String> safeDes, List<Integer> safeDesColor) {
....
@Override
public AppInfo paserJson(String json) {
try {
JSONObject object = new JSONObject(json);
long id = object.getLong("id");
String name = object.getString("name");
String packageName = object.getString("packageName");
String iconUrl = object.getString("iconUrl");
float stars = Float.parseFloat(object.getString("stars"));
long size = object.getLong("size");
String downloadUrl = object.getString("downloadUrl");
String des = object.getString("des");
String downloadNum = object.getString("downloadNum");
String version = object.getString("version");
String date = object.getString("date");
String author = object.getString("author");
List<String> screen = new ArrayList<String>();
JSONArray screenArray = object.getJSONArray("screen");
for (int i = 0; i < screenArray.length(); i++) {
screen.add(screenArray.getString(i));
}
List<String> safeUrl = new ArrayList<String>();
List<String> safeDesUrl = new ArrayList<String>();
List<String> safeDes = new ArrayList<String>();
List<Integer> safeDesColor = new ArrayList<Integer>();
JSONArray jsonArray = object.getJSONArray("safe");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
safeUrl.add(jsonObject.getString("safeUrl"));
safeDesUrl.add(jsonObject.getString("safeDesUrl"));
safeDes.add(jsonObject.getString("safeDes"));
safeDesColor.add(jsonObject.getInt("safeDesColor"));
}
AppInfo appInfo = new AppInfo(id, name, packageName, iconUrl,
stars, size, downloadUrl, des, downloadNum, version, date,
author, screen, safeUrl, safeDesUrl, safeDes, safeDesColor);
return appInfo;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/bottom_layout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:background="@drawable/detail_bottom_bg" >
</FrameLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_layout"
android:layout_marginBottom="5dp"
android:fillViewport="true" >
public class DetailActivity extends BaseActivity {
private String packageName;
private AppInfo data;
@Override
protected void initView() {
LoadingPage loadingPage=new LoadingPage(this) {
@Override
protected LoadResult load() {
return DetailActivity.this.load();
}
@Override
public View createSuccessView() {
return DetailActivity.this.createSuccessView();
}
};
loadingPage.show(); // 必须调用show方法 才会请求服务器 加载新的界面
setContentView(loadingPage);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent(); // 获取到打开当前activity的意图对象
packageName = intent.getStringExtra("packageName");
super.onCreate(savedInstanceState);
}
private FrameLayout bottom_layout,detail_info,detail_safe,detail_des;
private HorizontalScrollView detail_screen;
private DetailInfoHolder detailInfoHolder;
private DetailScreenHolder screenHolder;
private DetailSafeHolder safeHolder;
private DetailDesHolder desHolder;
/**
* 加载成功的界面
* @return
*/
protected View createSuccessView() {
View view=UiUtils.inflate(R.layout.activity_detail);
// 添加信息区域
bottom_layout=(FrameLayout) view.findViewById(R.id.bottom_layout);
// 应用程序信息
detail_info=(FrameLayout) view.findViewById(R.id.detail_info);
detailInfoHolder=new DetailInfoHolder();
detailInfoHolder.setData(data);
detail_info.addView(detailInfoHolder.getContentView());
//安全标记
detail_safe=(FrameLayout) view.findViewById(R.id.detail_safe);
safeHolder=new DetailSafeHolder();
safeHolder.setData(data);
detail_safe.addView(safeHolder.getContentView());
//描述
detail_des=(FrameLayout) view.findViewById(R.id.detail_des);
desHolder=new DetailDesHolder();
desHolder.setData(data);
detail_des.addView(desHolder.getContentView());
// 中间5张图片
detail_screen=(HorizontalScrollView) view.findViewById(R.id.detail_screen);
screenHolder=new DetailScreenHolder();
screenHolder.setData(data);
detail_screen.addView(screenHolder.getContentView());
return view;
}
/**
* 请求服务器加载数据
* @return
*/
protected LoadResult load() {
DetailProtocol protocol=new DetailProtocol(packageName);
data = protocol.load(0);
if(data==null){
return LoadResult.error;
}else{
return LoadResult.success;
}
}
@Override
protected void initActionBar() {
super.initActionBar();
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public class DetailInfoHolder extends BaseHolder<AppInfo> {
@ViewInject(R.id.item_icon)
private ImageView item_icon;
@ViewInject(R.id.item_title)
private TextView item_title;
@ViewInject(R.id.item_rating)
private RatingBar item_rating;
@ViewInject(R.id.item_download)
private TextView item_download;
@ViewInject(R.id.item_version)
private TextView item_version;
@ViewInject(R.id.item_date)
private TextView item_date;
@ViewInject(R.id.item_size)
private TextView item_size;
/***
* 实例化控件和布局
*/
@Override
public View initView() {
View view=UiUtils.inflate(R.layout.detail_app_info);
ViewUtils.inject(this, view);
return view;
}
/**
* 给控件设置数据
*/
@Override
public void refreshView(AppInfo data) {
bitmapUtils.display(item_icon, HttpHelper.URL+"image?name="+data.getIconUrl());
item_title.setText(data.getName());
item_rating.setRating(data.getStars());
item_download.setText("下载:"+data.getDownloadNum());
item_version.setText("版本:"+data.getVersion());
item_date.setText("时间:"+data.getDate());
item_size.setText("大小:"+Formatter.formatFileSize(UiUtils.getContext(), data.getSize()));
}
}
public class DetailScreenHolder extends BaseHolder<AppInfo> {
private ImageView[] ivs;
@Override
public View initView() {
View view=UiUtils.inflate(R.layout.detail_screen);
ivs=new ImageView[5];
ivs[0]=(ImageView) view.findViewById(R.id.screen_1);
ivs[1]=(ImageView) view.findViewById(R.id.screen_2);
ivs[2]=(ImageView) view.findViewById(R.id.screen_3);
ivs[3]=(ImageView) view.findViewById(R.id.screen_4);
ivs[4]=(ImageView) view.findViewById(R.id.screen_5);
return view;
}
@Override
public void refreshView(AppInfo data) {
List<String> screen = data.getScreen(); // 集合的大小有可能小于5
for(int i=0;i<5;i++){
if(i<screen.size()){
ivs[i].setVisibility(View.VISIBLE);
bitmapUtils.display(ivs[i], HttpHelper.URL+"image?name="+screen.get(i));
}else{
ivs[i].setVisibility(View.GONE);
}
}
}
}
转载于:https://www.cnblogs.com/sixrain/p/4972623.html
11.菜单界面、详情界面相关推荐
- Android案例:电影APP列表界面+详情界面
目录: 一.效果图: 二.架构: 三.目录结构: 四.代码: 1.配置文件: 2.主页Activity: (1)布局文件: (2)java: 3.详情页Activity: (1)布局文件: (2)ja ...
- UI一揽子计划 20 (豆瓣实战之图片缓存 、豆瓣实战之详情界面(自适应行高) 、豆瓣实战之登陆注销、刘新林分享之UIAlertController)
一.图片缓存 ActivityModel.m 如果数据加载完毕就将图片放到缓存中. #pragma mark -- imageDownLoader 代理方法 // 成功返回data - (void) ...
- 2012年度最佳分享:仿webQQ界面,详情请下载,不吃亏
原文:2012年度最佳分享:仿webQQ界面,详情请下载,不吃亏 源代码下载地址:http://www.zuidaima.com/share/1550463288052736.htm 2012年度最佳 ...
- 仿蘑菇街,蜜芽宝贝,京东商品详情界面,与NestedScroll滑动
上一篇文章中有提到界面中嵌套NestedScrollView与Fragment并用,而NestedScrollView是不建议与ListView,RecyclerView嵌套的,虽然有解决滑动冲突的办 ...
- 应用详情界面不允许“DISABLE“
修改如下: packages/apps/Settings/src/com/android/settings/applications/ApplicationFeatureProviderImpl.ja ...
- CollapsingToolbarLayout+FloatingActionButton 打造精美详情界面
博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此 博主:威威喵 | 博客主页:https://blog.csdn.net/ ...
- 右键菜单删除本界面,QMenu::exec报错
场景:右键菜单删除本界面 1.QMenu菜单exec显示: 2.执行动作QAction; 3.直接删除本界面(或者发送信号到父界面,由父界面删除) 4.exec报错(原因:本界面已删除,对象为空,错误 ...
- android listview里item添加一个按钮点击事件,ListView Item点击事件跳转详情界面
有好久都没有碰安卓了,考试加五一双组合也真是让人蛋疼.好在都平安的度过了,所以又有时间gun回来弄弄我的小博客(虽然没多少人看= =).看了之前做的几个小demo,模式都差不多,但是每次写的时候都要在 ...
- 仿QQ个人信息详情界面中背景图的下拉扩展放大功能
一般一些项目中都少不了一些头部背景图,但是如果背景图静态的现实并不能呈现出与用户操作的交互感,所以要想办法让背景图动起来,qq的一些交互感我很喜欢,比如他的个人详情界面的背景图就是可以下拉扩展,并在扩 ...
最新文章
- IIS与ASP.NET对请求的处理
- 用JAVASCRIPT实现静态对象、静态方法和静态属性
- C++五子棋(七)——main函数以及项目总结
- ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理
- MCtalk对话抱抱星英语:从Diss在线英语教学乱象到回归教育本原
- 投影元素直接隔离_摸着夜色上露台开投影,是巴塞罗那设计师的浪漫
- php 条形码生成器,PHP条形码图像生成器
- Ember.js 入门指南——番外篇,路由、模板的执行、渲染顺序
- 计算机操作系统》第06章在线测试,《计算机操作系统》第06章在线测试
- webpack 合并压缩_webpack 打包压缩js和css的方法示例
- 【全网最全面C语言教程】C语言从入门到精通
- 高薪程序员晒出银行转账记录,网友:羡慕
- Mtk touch panel驱动/TP驱动详解
- Spotfire 表达式中的属性
- 判断浏览器是否支持html5
- 2017 ACM-CCPC 秦皇岛站 总结
- 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ 中的T和Z表示什么
- 电脑计算机管理摄像头服务,电脑上打开摄像头的方法
- 【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
- [供应链•案例篇] 走出皮革鞋类品牌寒冬,红蜻蜓战略聚焦全链路数智化转型