每日冲刺3
语音功能继续调用,修改之前的结构
package com.llw.goodtrash.ui; import android.content.Context; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.llw.goodtrash.R; import com.llw.goodtrash.adapter.SearchGoodsAdapter; import com.llw.goodtrash.contract.TextContract; import com.llw.goodtrash.model.TrashResponse; import com.llw.goodtrash.utils.Constant; import com.llw.mvplibrary.mvp.MvpActivity; import java.util.ArrayList; import java.util.List; /** * 手动输入物品进行垃圾分类 * * @author llw * @date 2021/3/31 17:58 */ public class TextInputActivity extends MvpActivity<TextContract.TextPresenter> implements TextContract.TextView { private static final String TAG = "TextInputActivity"; private EditText etGoods;//输入框 private ImageView ivClear;//清空输入框 private RecyclerView rvResult;//结果显示列表 private List<TrashResponse.NewslistBean> newslistBeanList = new ArrayList<>();//数据列表 private SearchGoodsAdapter searchGoodsAdapter;//结果列表适配器 @Override public void initData(Bundle savedInstanceState) { initView(); } @Override public int getLayoutId() { return R.layout.activity_text_input; } @Override protected TextContract.TextPresenter createPresenter() { return new TextContract.TextPresenter(); } /** * 页面初始化 */ private void initView() { etGoods = findViewById(R.id.et_goods); ivClear = findViewById(R.id.iv_clear); rvResult = findViewById(R.id.rv_result); //配置适配器 设置布局和数据源 searchGoodsAdapter = new SearchGoodsAdapter(R.layout.item_search_rv, newslistBeanList); //设置列表的布局管理器 rvResult.setLayoutManager(new LinearLayoutManager(this)); //列表item点击事件 searchGoodsAdapter.setOnItemChildClickListener((adapter, view, position) -> { showMsg("点击了" + newslistBeanList.get(position).getName()); }); //设置列表适配器 rvResult.setAdapter(searchGoodsAdapter); //设置输入监听 etGoods.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().length() < 1) { ivClear.setVisibility(View.INVISIBLE); } else { ivClear.setVisibility(View.VISIBLE); } } @Override public void afterTextChanged(Editable s) { } }); //设置动作监听 etGoods.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_SEARCH) { String word = etGoods.getText().toString().trim(); if (word.isEmpty()) { showMsg("请输入物品名"); } else { //显示加载弹窗 showLoadingDialog(); //控制输入法 controlInputMethod(); //请求接口 mPresenter.searchGoods(word); } return true; } return false; }); //清空输入框内容 ivClear.setOnClickListener(v -> { controlInputMethod(); etGoods.setText(""); }); } /** * 控制输入法 * 当输入法打开时关闭,关闭时弹出 */ private void controlInputMethod() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } /** * 搜索物品返回数据 * * @param response */ @Override public void getSearchResponse(TrashResponse response) { //隐藏加载弹窗 hideLoadingDialog(); if (response.getCode() == Constant.SUCCESS_CODE) { //请求成功 进行数据的渲染 if (response.getNewslist() != null && response.getNewslist().size() > 0) { newslistBeanList.clear(); newslistBeanList.addAll(response.getNewslist()); //刷新适配器 searchGoodsAdapter.notifyDataSetChanged(); } else { showMsg("触及到了知识盲区"); } } else { //显示请求接口失败的原因 showMsg(response.getMsg()); } } /** * 搜索物品失败返回 * * @param throwable 异常信息 */ @Override public void getSearchResponseFailed(Throwable throwable) { hideLoadingDialog(); Log.e(TAG, throwable.toString()); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical" tools:context=".MainActivity"> <!--标题--> <com.google.android.material.appbar.MaterialToolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimaryDark"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="垃圾分类" android:textColor="@color/white" android:textSize="18sp" /> </com.google.android.material.appbar.MaterialToolbar> <!--文字输入--> <com.google.android.material.button.MaterialButton style="@style/Widget.MaterialComponents.Button.UnelevatedButton" android:layout_width="match_parent" android:layout_height="@dimen/dp_60" android:layout_margin="@dimen/dp_16" android:gravity="center" android:insetTop="@dimen/dp_0" android:insetBottom="@dimen/dp_0" android:onClick="jumpTextInput" android:text="文字输入" android:textSize="@dimen/sp_16" android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar" app:backgroundTint="@color/colorPrimaryDark" app:cornerRadius="@dimen/dp_12" app:icon="@mipmap/icon_text_input" app:iconGravity="textStart" app:iconSize="@dimen/dp_24" /> <!--声音输入--> <com.google.android.material.button.MaterialButton style="@style/Widget.MaterialComponents.Button.UnelevatedButton" android:layout_width="match_parent" android:layout_height="@dimen/dp_60" android:layout_margin="@dimen/dp_16" android:gravity="center" android:insetTop="@dimen/dp_0" android:insetBottom="@dimen/dp_0" android:onClick="jumpVoiceInput" android:text="声音输入" android:textSize="@dimen/sp_16" android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar" app:backgroundTint="@color/colorPrimaryDark" app:cornerRadius="@dimen/dp_12" app:icon="@mipmap/icon_voice_input" app:iconGravity="textStart" app:iconSize="@dimen/dp_24" /> </LinearLayout>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南