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.学习感悟与思考

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

...全文
198 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

102

社区成员

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

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