Android简单版天气预报,前期基本构建(第一步)
这是我第一次写博客,刚上大二,想用博客来巩固我的知识,也希望能帮助到看到这篇文章的人,写的不好也请多多指出,打算一个星期更新一次
这个星期实现的:用简单的ListView实现选择城市,可添加城市,删除城市,只有选择四个城市
首先说以下我自己的学习方法,如果不了解用法,我会从最把基础的东西先学会,例如ListView
ListView最基本用法:
ArrayAdapter:最简单的一个Adapter,只能展现一行文字
ArrayAdapter的两个构造方法
public ArrayAdapter (Context context, int resource, int textViewResourceId, List objects)
public ArrayAdapter (Context context, int resource, List objects)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class SelectCity extends AppCompatActivity {
private ListView listView;
private List<String> list=new ArrayList<>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_city);
listView=findViewById(R.id.lv_select);
list.add("北京");
list.add("上海");
list.add("广州");
list.add("深圳");
adapter=new ArrayAdapter<String>(SelectCity.this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
}
}
注:android.R.layout.simple_list_item_1是Android自带的布局
SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果
SimpleAdapter(Context context, List<? extends Map
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SelectCity extends AppCompatActivity {
private ListView listView;
private List<HashMap<String,String>> listMap=new ArrayList<>();
private SimpleAdapter simpleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_city);
listView=findViewById(R.id.lv_select);
HashMap<String,String> hashMap=new HashMap<>();
for(int i=0;i<4;i++){
hashMap.put("1","北京");
hashMap.put("2","上海");
hashMap.put("3","广州");
hashMap.put("4","深圳");
listMap.add(hashMap);
}
simpleAdapter=new SimpleAdapter(SelectCity.this,
listMap,android.R.layout.simple_list_item_2,
new String[]{"1","2","3","4"},
new int[]{android.R.id.text1,android.R.id.text2});
listView.setAdapter(simpleAdapter);
}
}
注:后面两个参数:from相当于设置HashMap的key找到value,to相当于向设置android.R.layout.simple_list_item_2里的组件
BaseAdapter:抽象类,用得最多的一个Adapter,可以自定义,相信会上面两种方法,这种方法理解起来也比较容易,首先初始化城市列表(建一个城市类),写一个自定义的adapter继承BaseAdapter(构造函数传入城市列表List),需要自定义布局,添加自定义的adapter
自定义适配器(CityAdapter)
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class CityAdapter extends BaseAdapter {
private List<CityItem> list;
public CityAdapter(List<CityItem> list){
this.list=list;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
TextView TVcityName;
//删除城市
ImageView ivDelCity;
if(view==null){
view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.city_item,viewGroup,false);
}
CityItem cityItem= list.get(i);
TVcityName=view.findViewById(R.id.tv_city_name);
TVcityName.setText(cityItem.getCityName());
//删除城市
ivDelCity=view.findViewById(R.id.iv_del_city);
ivDelCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
list.remove(i);
notifyDataSetChanged();//本身就是adapter
}
});
return view;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
}
自定义布局(city_item)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center">
<ImageView
android:id="@+id/btn_query"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:src="@drawable/select"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:textSize="25sp"
android:id="@+id/tv_city_name"
android:layout_centerVertical="true"
android:textColor="#fff"
android:layout_toRightOf="@id/btn_query"
android:text="城市" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="100dp"
android:id="@+id/iv_del_city"
android:layout_toRightOf="@id/tv_city_name"
android:src="@drawable/delete"
android:layout_centerVertical="true" />
</RelativeLayout>
主要方法(包含后面添加与删除的代码)
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SelectCity extends AppCompatActivity{
//ListView使用
private ListView listView;
private List<CityItem> list = new ArrayList<>();
private CityAdapter cityAdapter;
//返回按钮
private Button btnBackMain;
//添加按钮
private Button btnAddCity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_city);
listView = findViewById(R.id.lv_select);
btnBackMain = findViewById(R.id.btn_back);
btnAddCity = findViewById(R.id.btn_add);
//ListView使用
CityItem guangzhou = new CityItem("广州");
CityItem shanghai = new CityItem("上海");
list.add(guangzhou);
list.add(shanghai);
cityAdapter = new CityAdapter(list);
listView.setAdapter(cityAdapter);
//返回按钮
btnBackMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SelectCity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
//添加城市
btnAddCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String[] Country = {"广州", "深圳", "上海", "北京"};
final boolean[] booleans = {false, false, false, false};
AlertDialog.Builder dialog = new AlertDialog.Builder(SelectCity.this);
dialog.setTitle("对不起,您只能选择以下四个城市");
dialog.setSingleChoiceItems(Country, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
for (int j = 0; j < Country.length; j++) {
if (Country[j].equals(Country[i])) {
booleans[i] = true;
}
}
}
});
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
int CountryNameInt;
@Override
public void onClick(DialogInterface dialogInterface, int i) {
for (int j = 0; j < booleans.length; j++) {
if (booleans[j]) {
CountryNameInt = j;
break;
//Toast.makeText(AddCountryActivity.this,CountryName,Toast.LENGTH_LONG).show();
}
}
//初始化城市
CityItem cityItem=null;
//判断哪个城市选中
for(int k=0;k<booleans.length;k++){
if(k==CountryNameInt){
Toast.makeText(SelectCity.this, Country[CountryNameInt], Toast.LENGTH_LONG).show();
cityItem=new CityItem(Country[CountryNameInt]);
list.add(cityItem);
cityAdapter.notifyDataSetChanged();
break;
}
}
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.create();
dialog.show();
}
});
}
}
ListView基本用法就到这里,不过官方现在推荐用RecycleView,感兴趣的可以去实现一下
接下来实现添加城市,删除城市,选择城市后期会用到,现在暂时不是实现
添加城市主要代码(利用了对话框)
btnAddCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String[] Country = {"广州", "深圳", "上海", "北京"};
final boolean[] booleans = {false, false, false, false};
AlertDialog.Builder dialog = new AlertDialog.Builder(SelectCity.this);
dialog.setTitle("对不起,您只能选择以下四个城市");
dialog.setSingleChoiceItems(Country, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
for (int j = 0; j < Country.length; j++) {
if (Country[j].equals(Country[i])) {
booleans[i] = true;
}
}
}
});
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
int CountryNameInt;//记住选择城市的下标
@Override
public void onClick(DialogInterface dialogInterface, int i) {
for (int j = 0; j < booleans.length; j++) {
if (booleans[j]) {
CountryNameInt = j;
break;
//Toast.makeText(AddCountryActivity.this,CountryName,Toast.LENGTH_LONG).show();
}
}
//初始化城市
CityItem cityItem=null;
//判断哪个城市选中
for(int k=0;k<booleans.length;k++){
if(k==CountryNameInt){
//Toast.makeText(SelectCity.this, Country[CountryNameInt], Toast.LENGTH_LONG).show();
//找到所选的城市后添加城市
cityItem=new CityItem(Country[CountryNameInt]);
list.add(cityItem);
cityAdapter.notifyDataSetChanged();//记得刷新
break;
}
}
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.create();
dialog.show();
}
});
删除城市,在adapter中实现
ivDelCity=view.findViewById(R.id.iv_del_city);
ivDelCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
list.remove(i);
notifyDataSetChanged();//本身就是adapter
}
});
好了,这星期就更新到这,初次入博,请多关照