首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

执行/向自定义ListView添加搜索功能

自定义ListView是Android开发中常用的列表视图控件,它可以用于展示大量数据,并且可以根据需求进行自定义样式和功能。添加搜索功能可以让用户快速定位所需的数据。

实现向自定义ListView添加搜索功能可以按以下步骤进行:

  1. 创建布局文件:首先,创建一个布局文件,包含一个EditText用于输入搜索关键字,以及一个ListView用于展示数据列表。
  2. 创建数据源:准备一个数据源,可以是一个数组、集合或数据库查询结果,用于存储需要展示的数据。
  3. 创建自定义适配器:根据需要,创建一个继承自BaseAdapter或ArrayAdapter的自定义适配器类,重写getView方法以展示数据。
  4. 实现搜索功能:在Activity或Fragment中,对EditText添加文本变化监听器,每次文本变化时,获取输入的关键字并筛选数据源。然后调用适配器的notifyDataSetChanged方法更新列表显示。

以下是一个示例代码:

布局文件(activity_main.xml):

代码语言:txt
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/editTextSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入关键字进行搜索"/>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

适配器类(CustomAdapter.java):

代码语言:txt
复制
public class CustomAdapter extends BaseAdapter {
    private List<String> dataList;
    private LayoutInflater inflater;

    public CustomAdapter(Context context, List<String> data) {
        inflater = LayoutInflater.from(context);
        dataList = data;
    }

    @Override
    public int getCount() {
        return dataList.size();
    }

    @Override
    public Object getItem(int position) {
        return dataList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.textView = convertView.findViewById(R.id.textView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.textView.setText(dataList.get(position));
        return convertView;
    }

    private static class ViewHolder {
        TextView textView;
    }
}

Activity类(MainActivity.java):

代码语言:txt
复制
public class MainActivity extends AppCompatActivity {
    private EditText editTextSearch;
    private ListView listView;
    private CustomAdapter adapter;
    private List<String> dataList;
    private List<String> filteredList;

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

        editTextSearch = findViewById(R.id.editTextSearch);
        listView = findViewById(R.id.listView);

        // 初始化数据源
        dataList = new ArrayList<>();
        dataList.add("Apple");
        dataList.add("Banana");
        dataList.add("Orange");
        dataList.add("Mango");
        dataList.add("Grape");

        // 初始化适配器
        adapter = new CustomAdapter(this, dataList);
        listView.setAdapter(adapter);

        // 添加搜索功能
        filteredList = new ArrayList<>();
        editTextSearch.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) {
                filteredList.clear();
                String keyword = s.toString().toLowerCase();
                for (String item : dataList) {
                    if (item.toLowerCase().contains(keyword)) {
                        filteredList.add(item);
                    }
                }
                adapter = new CustomAdapter(MainActivity.this, filteredList);
                listView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }
}

上述代码实现了一个简单的搜索功能,用户在EditText中输入关键字时,列表会根据关键字筛选数据并更新显示。可以根据实际需求进行修改和扩展。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台(https://cloud.tencent.com/product/baas)
  • 腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 腾讯云人工智能平台(https://cloud.tencent.com/product/tai)
  • 腾讯云物联网平台(https://cloud.tencent.com/product/iotexplorer)
  • 腾讯云存储(https://cloud.tencent.com/product/cos)
  • 腾讯云区块链(https://cloud.tencent.com/product/tbaas)
  • 腾讯云元宇宙(https://cloud.tencent.com/product/metaverse)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券