20212305 2023-2024-2 《移动平台开发与实践》移动平台开发综合实践

20212305杨贯宇 2024-06-24 23:33:33

20212305 2023-2024-2 《移动平台开发与实践》移动平台开发综合实践

1.实验内容

设计了一款城市旅游App,来介绍各大城市的旅游景点。

2.实验过程

2.1 确定基础功能

我希望这个app首先具有登录页面、城市列表、城市旅游景点介绍等功能。

2.2 设计UI界面

根据上述功能,能够确定下来的有登录按钮,城市列表,“返回”按钮,还需要有用来显示城市旅游景点介绍的文字说明。
为了更美观也更符合主题一些,我们还可以找一张好看的背景图。
最后效果如下:

img


img


img

2.3 编写程序运行代码

代码分为三个模块。登录页面、城市列表页面、城市下详情页面。
登录页面分为:登录按钮的点击事件监听器,两个输入框输入内容的判断。详见下面的代码分析。

img


登录页面代码中有按钮监听、两个输入框内容的判断,和一个Toast弹窗。

城市列表页面分为:城市列表Recyclerview、RecyclerView的适配器Adapter,还有适配器的点击事件、页面跳转等。详见下面的代码分析。

img


上述代码中是城市列表控件Recyclerview的使用,和适配器的使用。只要用到Recyclerview就必须要有适配器来搭配使用,二者密不可分!下面是适配器的代码。

img


img


适配器中使用了ViewHolder来初始化每个城市的内容。使用适配器中的OnBindViewHolder来设置城市的图片和城市名称。

城市详情页面:由城市图片、城市名称、城市旅游详情简介和一个返回按钮组成。返回按钮就是个点击事件。城市图片、名称、旅游详情通过上个城市列表页面的点击传过来数据,也就是通过Intent发送过来的数据,具体代码如下。

img


城市数据通过getIntent.getSerialzbleExtra来获取到详细数据。然后把数据分别设置到TextView、ImageView上。再加上返回按钮的点击事件,即可实现功能。

3. 代码分析

3.1设置登录按钮的点击事件监听器

loginBtn.setOnClickListener(v -> {
    String nam = name.getText().toString();
    String pass = password.getText().toString();
    if (nam.isEmpty()) {
        show("请输入用户名");
        return;
    }
    if (pass.isEmpty()) {
        show("请输入密码");
        return;
    }
    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    intent.putExtra("name", nam);
    startActivity(intent);
});

3.2设置城市列表的代码:

recyclerView = findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
List<City> list = getData();
cityAdapter = new CityAdapter(list, this);
cityAdapter.setOnItemClick((view, position) -> {
    City city = list.get(position);
    Intent intent = new Intent(MainActivity.this, CityActivity.class);
    intent.putExtra("city", city);
    startActivity(intent);
});
recyclerView.setAdapter(cityAdapter);

3.3适配器代码:

public class CityAdapter extends RecyclerView.Adapter<CityAdapter.CityViewHolder> {
    private List<City> list;
    private Context context;
    public CityAdapter(List<City> list, Context context) {
        this.list = list;
        this.context = context;
    }
    public OnItemClickListener onItemClick;
    public void setOnItemClick(OnItemClickListener onItemClick){
        this.onItemClick = onItemClick;
    }
    public interface OnItemClickListener { void onItemClick(View view, int position);}
    @NonNull
    @Override
    public CityViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(context, R.layout.item_city, null);
        CityViewHolder myViewHoder = new CityViewHolder(view);
        return myViewHoder;
    }
    @Override
    public void onBindViewHolder(@NonNull CityViewHolder cityViewHolder, int position) {
        City city = list.get(position);
        cityViewHolder.textView.setText(city.getName());
        cityViewHolder.imageView.setImageDrawable(ContextCompat.getDrawable(context, city.getImg()));
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    class CityViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private ImageView imageView;
        public CityViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.tv_city_name);
            imageView = itemView.findViewById(R.id.city_img);
            itemView.setOnClickListener(v -> {
                int position = getAdapterPosition();
                onItemClick.onItemClick(v, position);
            });
        }
    }
}

3.4城市详情代码:

city = (City) getIntent().getSerializableExtra("city");
init();
title.setText(city.getName());
imageView.setImageDrawable(ContextCompat.getDrawable(this, city.getImg()));
content.setText(city.getContent());
back.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

4. 运行结果(演示视频)

登录页面输入用户名、密码后点击登录,跳转到城市列表页面,随便点击一个城市,进入城市旅游详情页面,向下滑动页面到底部,找到返回按钮,即可返回城市列表页面,点击其他城市继续切换下一个城市。

5.实践中遇到的问题及解决

问题1:城市列表如何实现
问题1解决方案:通过查询资料得知安卓原生空间recyclerview+Recyclerview.Adapter即可实现城市列表。
问题2:列表适配器 Recyclerview.Adapter并没有item点击事件的设置。
问题2解决方案:需要自己设计接口来实现item的点击事件。

6.学习感悟与思考

这次综合实践其实让我有些挫败,因为一开始就是奔着做一个自己感兴趣的软件开始的,基本功能的实现很简单。而附加的功能,捣鼓了很久都没弄出来,加上紧张的期末,真让人胸中郁结。我的主要精力都花在怎么实现附加功能,最后却没个结果,竹篮打水一场空,真挺叫人难过的。不过好在基础功能实现了,但是太简陋了,如果能够掌握更多的知识,应该会把这个软件做的比现在好很多,还需要继续学习!

...全文
297 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕三相并网逆变器的控制策略展开研究,重点探讨了虚拟阻抗与统一有源阻尼相结合的控制方法,并实现了SVPWM(空间矢量脉宽调制)与SPWM(正弦脉宽调制)两种调制方式在Simulink平台下的仿真建模。通过引入虚拟阻抗改善系统输出阻抗特性,结合统一有源阻尼技术有效抑制LC或LCL滤波器引起的谐振问题,从而提升逆变器在弱电网条件下的并网稳定性与电能质量。研究涵盖了控制策略的设计、调制算法的实现、动态响应分析及谐波抑制效果评估,同时拓展涉及正负序分离、中点电位平衡、DPWMA调制等关键技术,构建了完整的高性能并网逆变器控制系统仿真体系。; 适合人群:适用于从事电力电子、新能源发电、智能电网及相关领域的研究生、科研人员和工程技术人员,特别是具备三相并网逆变器控制理论基础并熟悉MATLAB/Simulink仿真环境的专业人士;; 使用场景及目标:①用于高校与科研机构开展并网逆变器稳定性与控制策略的深入研究;②支撑学位论文撰写、学术期刊投稿或科研项目申报中的仿真验证工作;③为企业研发高性能、高可靠性的并网逆变器产品提供先进的控制方案与技术原型支持;; 阅读建议:建议读者结合提供的Simulink模型文件进行实际操作与仿真验证,重点关注虚拟阻抗参数设计与有源阻尼的协同作用机制,深入理解不同调制策略对系统性能的影响,并可进一步拓展学习文中提及的正负序控制、中点电位平衡等先进控制技术,全面提升对复杂电网环境下并网系统稳定运行机制的认知水平。
内容概要:本文围绕基于近端梯度算法求解LASSO分位数回归的短期风电功率预测方法展开研究,旨在提升预测模型在复杂环境下的精度与鲁棒性。文章系统构建了LASSO分位数回归模型,深入剖析其数学原理,并引入近端梯度算法进行高效优化求解,有效应对高维稀疏数据与异常值干扰等问题。通过Matlab平台完成了完整的算法实现与仿真实验,利用实际风电数据验证了该方法在不同分位点下的预测性能,结果表明其相较于传统方法具有更强的稳定性和准确性。此外,文档还整合了电力系统、机器学习、路径规划等多个领域的相关科研方向与技术应用案例,突出该方法在新能源预测与智能优化中的广泛适用性与实践价值。; 适合人群:具备扎实的数学基础(如凸优化、统计学习)与Matlab编程能力,从事新能源发电预测、电力系统调度、智能优化算法或机器学习等领域的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于短期风电功率预测,增强模型对噪声、异常值及非平稳特性的适应能力,提升电网调度的安全性与经济性;②为研究LASSO回归、分位数回归及近端梯度优化算法的学者提供可复现、可扩展的Matlab代码实例,便于算法改进与对比实验;③作为可再生能源消纳、电力市场出清、微网能量管理等工程场景下的核心数据分析与决策支持工具。; 阅读建议:此资源以算法实现为核心,建议读者在掌握LASSO与分位数回归理论基础上,结合Matlab代码逐行分析近端梯度算法的迭代流程与收敛特性,重点关注正则化项与损失函数的权衡机制。同时可借鉴文中丰富的科研案例,拓展至光伏预测、负荷预测等相似应用场景,注重理论推导、代码实现与实验验证的深度融合。
内容概要:本文围绕铰接式重型车辆的稳健路径跟踪控制问题,提出并实现了基于H∞控制器与鲁棒线性二次调节器(RLQR)的控制策略。通过建立车辆动力学模型,针对系统中存在的外部干扰与参数不确定性,设计H∞控制器以增强系统的抗干扰能力,并结合RLQR优化控制性能,在保证稳定性的同时提升路径跟踪精度。研究利用Matlab进行仿真验证,对比不同工况下的控制效果,展示了所提方法在复杂行驶环境下的优越性与鲁棒性。; 适合人群:具备自动控制理论基础、车辆工程或自动化相关背景,熟悉Matlab/Simulink仿真工具,从事智能车辆控制、路径跟踪算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于铰接式重型车辆(如矿用卡车、大型拖挂车)的自动驾驶路径跟踪控制系统设计;②为解决存在模型不确定性和外界扰动条件下的鲁棒控制问题提供算法参考与实现范例;③服务于高校科研项目、毕业论文或工业界智能运输系统的技术开发。; 阅读建议:此资源以Matlab代码为核心支撑,建议读者在学习过程中结合控制理论基础知识,运行并调试所提供的仿真程序,深入理解H∞与RLQR控制器的设计流程与参数整定方法,同时可通过修改模型参数或引入新的扰动场景进行拓展性实验,以增强实际应用能力。

102

社区成员

发帖
与我相关
我的任务
社区描述
实验报告
android 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧