1. 程式人生 > 其它 >仿美團選擇城市 第三方開源庫

仿美團選擇城市 第三方開源庫

技術標籤:工作室專案筆記androidandroid studio

一、build.gradle

dependencies {
    //選擇城市定位
    implementation 'com.zaaach:citypicker:2.0.3'	//必選
    implementation 'com.android.support:recyclerview-v7:28.0.0'	//必選
}

二、AndroidManifest.xml

在<application></application>之間加入

<activity android:name=".SelectCityActivity"
          android:theme="@style/DefaultCityPickerTheme"
          android:screenOrientation="portrait"
          android:windowSoftInputMode="stateHidden|adjustPan">
</activity>


三、SelectCityActivity.java和新建對應的activity_select_city.xml(後者自動生成empty activity時生成的,不用寫內容)

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import com.zaaach.citypicker.CityPicker;
import com.zaaach.citypicker.adapter.OnPickListener;
import com.zaaach.citypicker.model.City;
import com.zaaach.citypicker.model.HotCity;
import com.zaaach.citypicker.model.LocatedCity;

import java.util.ArrayList;
import java.util.List;

public class SelectCityActivity extends AppCompatActivity {
    List<HotCity> hotCities = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_city);

        hotCities.add(new HotCity("北京", "北京", "101010100"));
        hotCities.add(new HotCity("上海", "上海", "101020100"));
        hotCities.add(new HotCity("廣州", "廣東", "101280101"));
        hotCities.add(new HotCity("深圳", "廣東", "101280601"));
        hotCities.add(new HotCity("杭州", "浙江", "101210101"));
        hotCities.add(new HotCity("南昌","江西","101210106"));


        CityPicker.from(SelectCityActivity.this)
                .enableAnimation(false)  //啟用動畫效果
                .setLocatedCity(new LocatedCity("南昌", "江西", "101210106"))  //APP自身已定位的城市,預設為null(定位失敗)
                .setHotCities(hotCities)  //指定熱門城市
                .setOnPickListener(new OnPickListener() {
                    @Override
                    public void onPick(int position, City data) {

                        String str=data.getName();//儲存選中的城市
                        Intent it2=new Intent();
                        it2.putExtra("select_city",str);
                        setResult(2,it2);
                        finish();

                        Toast.makeText(getApplicationContext(), data.getName(), Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onLocate() {

                    }

                    @Override
                    public void onCancel() {

                    }
                })
                .show();

    }
}


四、SchoolMainActivitye.java和activity_school_main.xml

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class SchoolMainActivity extends AppCompatActivity {
 
    private TextView location;//選擇城市 文字
    private ImageView location_up;//選擇城市 下標符號


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_school_main);

        

        //選擇城市 點選事件
        location=findViewById(R.id.location);
        location.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent it1=new Intent(SchoolMainActivity.this,SelectCityActivity.class);
                startActivityForResult(it1,1);
            }
        });

        //選擇城市 下標圖片點選事件
        location_up=findViewById(R.id.location_up);
        location_up.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent it=new Intent();
                it.setClass(SchoolMainActivity.this, SelectCityActivity.class);
                SchoolMainActivity.this.startActivity(it);
            }
        });
    }

    //回撥方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {//requestCode 第一個介面(學校首頁)點選傳過去的常量
            String show="";
            show=data.getStringExtra("select_city");//data即intent值,第二個介面傳回來的資料
            location.setText(show);
        }
    }



}
<TextView
            android:id="@+id/location"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="南昌"
            android:textSize="16dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="8dp"
            android:layout_marginLeft="10dp"/>

        <ImageView
            android:id="@+id/location_up"
            android:layout_width="18dp"
            android:layout_height="18dp"
            app:srcCompat="@drawable/up"
            app:layout_constraintLeft_toLeftOf="@id/location"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginLeft="37dp"
            android:layout_marginTop="8dp"
            />

參考連結:

1.第三方庫:選擇城市

https://github.com/zaaach/CityPicker

2.資料回傳:

https://blog.csdn.net/qq_40967402/article/details/82904135?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160915148416780308383372%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160915148416780308383372&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-82904135.first_rank_v2_pc_rank_v29&utm_term=%E6%95%B0%E6%8D%AE%E5%9B%9E%E4%BC%A0