212.m1-详情页面信息和5张图的显示

本文介绍了一款App中HomeFragment与详情页的设计与实现过程。HomeFragment通过itemClick事件跳转到DetailActivity,后者负责展示应用详情,包括基本信息、屏幕截图等内容。通过Holder模式实现了高效的数据绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详情页是有HomeFragment中itemClick事件携带了包名作为参数来实现跳转的,在DetailActivity中实现详情页的布局的逻辑,然后每一个部分都是使用Holder来实现

HomeDragment.java

package com.ldw.market.fragment;

import java.util.List;

import android.content.Intent;
import android.os.Bundle;
import android.text.format.Formatter;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import com.ldw.market.DetailActivity;
import com.ldw.market.R;
import com.ldw.market.Adapter.DefaultAdapter;
import com.ldw.market.domain.AppInfo;
import com.ldw.market.holder.BaseHolder;
import com.ldw.market.holder.HomePictureHolder;
import com.ldw.market.http.HttpHelper;
import com.ldw.market.protocol.HomeProtocol;
import com.ldw.market.utils.UiUtils;
import com.ldw.market.view.BaseListView;
import com.ldw.market.view.LoadingPage.LoadResult;
import com.lidroid.xutils.bitmap.PauseOnScrollListener;

/*
 * Home页面,主体的加载的几个页面和服务器请求数据都是在BaseFragment中去实现
 */
public class HomeFragment extends BaseFragment1 {

	private List<AppInfo> appInfos;//获取到app的集合
	private List<String> pictures;//获取到图片地址的集合

		// 当Fragment挂载的activity创建的时候调用
		@Override
		public void onActivityCreated(Bundle savedInstanceState) {
			super.onActivityCreated(savedInstanceState);
			show();
		}
	
	public View createSuccessView() {
		//使用自定义的ListView,ListView初始化的时候会初始化几个方法
		BaseListView listView = new BaseListView(UiUtils.getContext());
		
		//创建一个Holder
		HomePictureHolder pictureHolder = new HomePictureHolder();
		pictureHolder.setData(pictures);
		//获取到holder的view对象
		View contentView = pictureHolder.getContentView();
		//设置宽和高,方便画图
		//contentView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
		//把holder里面的view添加到ListView的上面
		listView.addHeaderView(contentView);
		
		listView.setAdapter(new HomeAdapter(appInfos, listView));
		// 第二个参数 慢慢滑动的时候是否加载图片 false  加载   true 不加载
		//  第三个参数  飞速滑动的时候是否加载图片  true 不加载 
		listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
		bitmapUtils.configDefaultLoadingImage(R.drawable.ic_default);  // 设置如果图片加载中显示的图片
        bitmapUtils.configDefaultLoadFailedImage(R.drawable.ic_default);// 加载失败显示的图片
		return listView;
	}
	
	private class HomeAdapter extends DefaultAdapter<AppInfo>{

		//构造函数,初始化数据
		public HomeAdapter(List<AppInfo> appInfos, ListView lv) {
			super(appInfos, lv);
			// TODO Auto-generated constructor stub
		}

		@Override
		protected BaseHolder<AppInfo> getHolder() {
			// TODO Auto-generated method stub
			return new ViewHolder();
		}

		//加载更多数据下拉条的实现
		@Override
		protected List<AppInfo> onload() {
			HomeProtocol protocol = new HomeProtocol();
			List<AppInfo> data = protocol.load(appInfos.size());
			appInfos.addAll(data);
			return data;
		}
		
		/**在该方法去处理条目的点击事件*/
		@Override
		public void onInnerItemClick(int position) {
			Toast.makeText(UiUtils.getContext(), "position:"+position, 0).show();
			super.onInnerItemClick(position);
			AppInfo appInfo = datas.get(position);
			//点击以后跳转到详情页
			Intent intent = new Intent(UiUtils.getContext(), DetailActivity.class);
			//携带参数,点击的是哪一个应用,把包名传递过去
			intent.putExtra("packageName", appInfo.getPackageName());
			startActivity(intent);
			
		}
		

		
		
	}
	
	static class ViewHolder extends BaseHolder<AppInfo>{
		ImageView item_icon;
		TextView item_title,item_size,item_bottom;
		RatingBar item_rating;

		
		//更新界面
		@Override
		public void refreshView(AppInfo data){
			this.item_title.setText(data.getName());// 设置应用程序的名字
			String size = Formatter.formatFileSize(UiUtils.getContext(), data.getSize());
			this.item_size.setText(size);
			this.item_bottom.setText(data.getDes());
			float stars = data.getStars();
			this.item_rating.setRating(stars); // 设置ratingBar的值
			String iconUrl = data.getIconUrl(); //这个地址不全,需要加上apache地址"iconUrl": "app/com.youyuan.yyhl/icon.jpg",
			//http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg
			
			
			//第一个参数是显示图片的控件,第二个参数是显示图片的url
			bitmapUtils.display(this.item_icon, HttpHelper.URL+"image?name="+iconUrl);
			// 显示图片的控件
			//bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl);
		}

		@Override
		public View initView() {
			View contentView = View.inflate(UiUtils.getContext(), R.layout.item_app, null);
			this.item_icon = (ImageView) contentView.findViewById(R.id.item_icon);
			this.item_title = (TextView) contentView.findViewById(R.id.item_title);
			this.item_size = (TextView) contentView.findViewById(R.id.item_size);
			this.item_bottom = (TextView) contentView.findViewById(R.id.item_bottom);
			this.item_rating = (RatingBar) contentView.findViewById(R.id.item_rating);
			return contentView;
		}

	}

	@Override
	public LoadResult load() {
		HomeProtocol protocol = new HomeProtocol();
		//获取到app的信息
		appInfos = protocol.load(0);
		pictures = protocol.getPictures();
		return checkData(appInfos);
	}
	

	
	
}
DetailActivity.java

package com.ldw.market;

/*
 * 左侧的详情页
 */
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;

import com.ldw.market.domain.AppInfo;
import com.ldw.market.fragment.BaseFragment1;
import com.ldw.market.holder.DetailDesHolder;
import com.ldw.market.holder.DetailInfoHolder;
import com.ldw.market.holder.DetailSafeHolder;
import com.ldw.market.holder.DetailScreenHolder;
import com.ldw.market.protocol.DetailProtocol;
import com.ldw.market.utils.UiUtils;
import com.ldw.market.view.LoadingPage;
import com.ldw.market.view.LoadingPage.LoadResult;

public class DetailActivity extends BaseActivity{
	
	private String packageName;
	private AppInfo data;
	@Override
	protected void initView() {
		System.out.println("3333" + view);
		LoadingPage loadingPage = new LoadingPage(this){

			@Override
			protected LoadResult load() {
				return DetailActivity.this.load();
			}
			@Override
			public View createSuccessView() {
				return DetailActivity.this.createSuccessView();
			}
		};
		System.out.println("4444" + view);
		loadingPage.show();
		setContentView(loadingPage);
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		System.out.println("1111" + view);
		// 获取到打开当前activity的意图对象
		Intent intent = getIntent();  
		//获取到传递过来的包名
		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;
	private View view;
	
	//加载成功的界面
	protected View createSuccessView() {
		view = View.inflate(UiUtils.getContext(), R.layout.activity_detail, null);
		// 添加信息区域
		bottom_layout=(FrameLayout) view.findViewById(R.id.bottom_layout);
				
		//  操作 应用程序信息
		detail_info=(FrameLayout) view.findViewById(R.id.detail_info);
		detailInfoHolder=new DetailInfoHolder();//创建holder
		detailInfoHolder.setData(data);//携带参数,传递到holder,调用refreshView方法
		detail_info.addView(detailInfoHolder.getContentView());//holder中初始化布局
		System.out.println("555555" + view);
		
		//安全标记
		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;
	}

	//请求服务器加载数据
	protected LoadResult load() {
		//服务器请求包名的数据
		DetailProtocol protocol=new DetailProtocol(packageName);
		data = protocol.load(0);
		System.out.println("555555data" + data);
		if(data == null){
			return LoadResult.error;
		}else{
			return LoadResult.success;
		}
	}

	@Override
	protected void initActionBar() {
		super.initActionBar();
		//获取到actionBar,使用getSupportActionBar,getActionBar是android.app下面的getActionBar
		ActionBar actionBar = getSupportActionBar();
		//图标的显示与隐藏,显示返回按钮
		actionBar.setDisplayHomeAsUpEnabled(true);
	}
	
	/*
	// 处理actionBar菜单条目的点击事件,实现点击图标来隐藏当前的界面 
    @Override
	public boolean onOptionsItemSelected(MenuItem item) {
		System.out.println("所有");
		//当前点击的条目是search
		if (item.getItemId() == android.R.id.home) {
			finish();
		}
		return super.onOptionsItemSelected(item);
	}
    */
}

DetailInfoHolder.java应用的信息的显示

package com.ldw.market.holder;

import android.text.format.Formatter;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import com.ldw.market.R;
import com.ldw.market.domain.AppInfo;
import com.ldw.market.http.HttpHelper;
import com.ldw.market.utils.UiUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

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=View.inflate(UiUtils.getContext(), R.layout.detail_app_info, null);
		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()));
		
	}

}

DetailScreenHolder.java中间的几张图片的展示可以滚动

package com.ldw.market.holder;

import java.util.List;

import com.ldw.market.R;
import com.ldw.market.domain.AppInfo;
import com.ldw.market.http.HttpHelper;
import com.ldw.market.utils.UiUtils;

import android.view.View;
import android.widget.ImageView;

public class DetailScreenHolder extends BaseHolder<AppInfo> {

	private ImageView[] ivs;
	@Override
	public View initView() {
		View view=UiUtils.inflate(R.layout.detail_screen);
		//初始化5个图片的集合
		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++){
			//图片数目小于5的时候
			if(i<screen.size()){
				ivs[i].setVisibility(View.VISIBLE);
				bitmapUtils.display(ivs[i], HttpHelper.URL+"image?name="+screen.get(i));
			}else{
				//图片数目大于5,让其他的图片不可见
				ivs[i].setVisibility(View.GONE);
			}
			
		}
		
	}

}


标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现模型架构解析,还深入探讨了模型优化实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能实现细节,并尝试在自己的项目中应用这些技术方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值