Android简单版天气预报,前期基本构建(第一步)

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
            }
        });

好了,这星期就更新到这,初次入博,请多关照

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章