Android实现输入搜索框

业务场景:

最近在开发一款Android app,需要在输入字符后,自动搜索相关的匹配项,然后展示为下拉列表,从列表中选择需要的条目后,填充到对应的文本框

解决方案:

我采用的 AutoCompleteTextView 组件来实现

代码如下:

layout代码:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/goodsName"
            android:textSize="20dp"
            android:textAlignment="center"
            android:layout_weight="3"/>
        <AutoCompleteTextView
            android:id="@+id/goodsName"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="7"
            android:hint="请输入"/>
</LinearLayout>

// 定义适配器和下拉列表数据源


// 定义Adapter
val goodsData = arrayListOf<String>()

// 定义适配器
val adapter = ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, goodsData)
binding.goodsName.setAdapter(adapter)

var goodsList:List<Goods> = emptyList()

// 定义文本改变事件
// 字符改变事件发生在条目点击事件之前
binding.goodsName.doOnTextChanged { goodsName, start, before, count ->
    goodsData.clear()

    goodsList = goodsService.findGoodsList(goodsName)
    goodsList.forEach {
        goodsData.add(it.name)
    }
}

// 定义条目点击事件
binding.goodsName.setOnItemClickListener { _, _, _, _ ->
    // 定义你需要的操作
}

最终效果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Android实现地址搜索框,你可以使用Google Places API来获取地址的自动补全和搜索功能。下面是一个简单的示例: 1. 首先,在你的Android项目中添加Google Places API依赖。你可以在项目的build.gradle文件中添加以下代码: ```groovy implementation 'com.google.android.gms:play-services-places:17.0.0' ``` 2. 在你的布局文件中添加一个EditText用于输入地址,例如: ```xml <EditText android:id="@+id/addressEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入地址" /> ``` 3. 在你的Activity或Fragment中,初始化Places API,并设置地址自动补全功能。例如: ```java import android.widget.EditText; import com.google.android.libraries.places.api.Places; import com.google.android.libraries.places.api.model.Place; import com.google.android.libraries.places.api.model.TypeFilter; import com.google.android.libraries.places.widget.Autocomplete; import com.google.android.libraries.places.widget.AutocompleteActivity; import com.google.android.libraries.places.widget.model.AutocompleteActivityMode; public class MainActivity extends AppCompatActivity { private EditText addressEditText; private int AUTOCOMPLETE_REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化Places API Places.initialize(getApplicationContext(), "YOUR_API_KEY"); // 获取地址输入框 addressEditText = findViewById(R.id.addressEditText); // 设置地址自动补全功能 addressEditText.setFocusable(false); addressEditText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.ADDRESS); Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields) .setTypeFilter(TypeFilter.ADDRESS) .build(MainActivity.this); startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == AUTOCOMPLETE_REQUEST_CODE) { if (resultCode == RESULT_OK) { // 获取选择的地址 Place place = Autocomplete.getPlaceFromIntent(data); addressEditText.setText(place.getAddress()); } else if (resultCode == AutocompleteActivity.RESULT_ERROR) { // 处理错误 Status status = Autocomplete.getStatusFromIntent(data); // Log.e(TAG, status.getStatusMessage()); } } } } ``` 这样,当用户点击地址输入框时,将会打开一个自动补全的界面,用户可以选择一个地址,并将其显示在输入框中。 请注意,在上述代码中的 `YOUR_API_KEY` 处,你需要替换为自己的Google Places API密钥。你可以在Google Cloud Console中创建一个项目并启用Places API来获取API密钥。 这只是一个简单的示例,你可以根据实际需求对其进行扩展和定制。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值