102
社区成员
发帖
与我相关
我的任务
分享设计了一款城市旅游App,来介绍各大城市的旅游景点。
我希望这个app首先具有登录页面、城市列表、城市旅游景点介绍等功能。
根据上述功能,能够确定下来的有登录按钮,城市列表,“返回”按钮,还需要有用来显示城市旅游景点介绍的文字说明。
为了更美观也更符合主题一些,我们还可以找一张好看的背景图。
最后效果如下:



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

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



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

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);
});
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);
});
}
}
}
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();
}
});
登录页面输入用户名、密码后点击登录,跳转到城市列表页面,随便点击一个城市,进入城市旅游详情页面,向下滑动页面到底部,找到返回按钮,即可返回城市列表页面,点击其他城市继续切换下一个城市。
问题1:城市列表如何实现
问题1解决方案:通过查询资料得知安卓原生空间recyclerview+Recyclerview.Adapter即可实现城市列表。
问题2:列表适配器 Recyclerview.Adapter并没有item点击事件的设置。
问题2解决方案:需要自己设计接口来实现item的点击事件。
这次综合实践其实让我有些挫败,因为一开始就是奔着做一个自己感兴趣的软件开始的,基本功能的实现很简单。而附加的功能,捣鼓了很久都没弄出来,加上紧张的期末,真让人胸中郁结。我的主要精力都花在怎么实现附加功能,最后却没个结果,竹篮打水一场空,真挺叫人难过的。不过好在基础功能实现了,但是太简陋了,如果能够掌握更多的知识,应该会把这个软件做的比现在好很多,还需要继续学习!