仿美團選擇城市 第三方開源庫
阿新 • • 發佈:2020-12-29
技術標籤:工作室專案筆記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.資料回傳: