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
}
});
好了,這星期就更新到這,初次入博,請多關照