【问题标题】:Want to search name in ListView by Firstname and Lastname?想通过名字和姓氏在 ListView 中搜索名字吗?
【发布时间】:2012-11-20 14:47:46
【问题描述】:

我有姓名列表(名字 + 姓氏),并希望在该 listView 中按名字和姓氏进行搜索。我正在使用此代码仅按名称搜索

Android Search in ListView Example

谁能给我提示需要对代码进行哪些更改以便我也可以按名字和姓氏进行搜索?

【问题讨论】:

  • 请在此处提供您的源代码
  • last name 的显示效果如何?是listview_array 还是单独的数组?
  • 我在几周前回答了这样一个问题,这有帮助吗? ArrayAdapter - filtering with multiple search terms 至少,它向您展示了如何以及为什么需要创建自定义 ArrayAdapter 来执行非标准过滤。

标签: android


【解决方案1】:

只需按照以下代码:

String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
                                    "iPhone 4S", "Samsung Galaxy Note 800",
                                    "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};

        lv = (ListView) findViewById(R.id.list_view);
        inputSearch = (EditText) findViewById(R.id.inputSearch);

        // Adding items to listview
        adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);

        lv.setAdapter(adapter); 



MainActivity.java
inputSearch.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
        // When user changed the Text
        MainActivity.this.adapter.getFilter().filter(cs);
    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub
    }
});

【讨论】:

    【解决方案2】:

    ArrayAdapter 已经具备过滤功能,ListView 可以接受搜索文本,所以你不需要重新发明轮子。

    例子:

    只要数据有多个对象,就让一个类保存数据:

    Public class FullName {
      public final String firstName;
      public final String lastName;
    
      public Fullname(String fn, String ln){
        this.firstName = fn;
        this.lastName  = ln;
      }
    
      @Override
      public String toString(){
        // this is what ArrayAdapter uses for display and search
        return firstName + " " + lastName; 
      }
    }
    

    内部活动:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    
      ListView nameList = new ListView(this);
    
      setContentView(nameList);
    
      ArrayAdapter<FullName> nameAdapter = new ArrayAdapter<FullName>(this,android.R.layout.simple_list_item_1);
    
      nameAdapter.add( new FullName("John","Doe")    );
      nameAdapter.add( new FullName("Bob","Carson")  );
      nameAdapter.add( new FullName("Kyle","Connor") );
    
      nameList.setAdapter(nameAdapter);
    
      //bring up the keyboard, start typing on a ListView and it will filter out matching results
      nameList.setTextFilterEnabled(true);
    }
    

    如果您真的想使用 EditText 进行搜索:

     nameAdapter.getFilter.filter(myEditText.getText());
    

    清除过滤器:

     nameAdapter.getFilter.filter(null);
    

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多