【问题标题】:ListView Filter Android Using SimpleAdapterListView 使用 SimpleAdapter 过滤 Android
【发布时间】:2015-11-30 09:49:42
【问题描述】:

我在android中创建了一个ListView,我想在列表上方添加EditText,当用户输入文本时,列表将根据用户输入进行过滤

谁能告诉我是否有办法过滤android中的列表适配器(使用SimpleAdapter)?

public class DanhSachHopDongChoNghiemThuActivity extends AppCompatActivity implements TextWatcher {
    String username = ...
    String password = ...
    String database = ...
    String server = ...
    Connection connect;
    EditText inputSearch;
    ListView listView;
    SimpleAdapter simpleAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inputSearch = (EditText)findViewById(R.id.editString);
        listView = (ListView)findViewById(R.id.listViewDanhSachHopDongChoNghiemThu);
        connect = CONN(username, password, database, server);
        querySQL();
        editString.addTextChangedListener(this);
    }
    public void querySQL() {
        ResultSet rs;
        try{
            PreparedStatement statement =
                    connect.prepareStatement("T_APIgetListThueBaoChoNghiemThu " + MainActivity.userId);
            rs = statement.executeQuery();
            List<Map<String,String>> data = null;
            data = new ArrayList<Map<String,String>>();
            if (rs != null) {
                while (rs.next()) {
                    Map<String, String> datanum = new HashMap<String, String>();
                    datanum.put("NgayHD", "Ngày HĐ: " + rs.getString("NgayLapHD"));
                    datanum.put("TenTB", rs.getString("TenTB"));
                    datanum.put("MaTB", rs.getString("MaTB"));
                    datanum.put("DiaChi", rs.getString("DiaChi"));
                    datanum.put("DaiVT", rs.getString("DaiVTTen"));
                    datanum.put("GhiChu", "Ghi chú: " + rs.getString("GhiChu"));
                    datanum.put("TenDVVT", rs.getString("DVVTTen"));
                    datanum.put("TrangThai", rs.getString("TrangThai"));
                    data.add(datanum);

                    String[] from = {"TenDVVT", "NgayHD", "TenTB", "MaTB", "DaiVT", "DiaChi", "GhiChu", "TrangThai"};
                    int[] to = {R.id.DichVu, R.id.txtNgayHD, R.id.txtTenTB, R.id.txtMaTB, R.id.txtDaiVT, R.id.txtDiaChi, R.id.txtGhiChu, R.id.txtTrangThai};

                    simpleAdapter = new SimpleAdapter(this, data, R.layout.danhsachchonghiemthu_listview_layout, from, to);
                    listView.setAdapter(simpleAdapter);
                }
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    @SuppressLint("NewApi")
    private Connection CONN(String _user, String _pass, String _DB,
                            String _server) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Connection conn = null;
        String ConnURL = null;
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            ConnURL = "jdbc:jtds:sqlserver://" + _server + ";"
                    + "databaseName=" + _DB + ";user=" + _user + ";password="
                    + _pass + ";";
            conn = DriverManager.getConnection(ConnURL);
        } catch (SQLException se) {
            Log.e("ERRO", se.getMessage());
        } catch (ClassNotFoundException e) {
            Log.e("ERRO", e.getMessage());
        } catch (Exception e) {
            Log.e("ERRO", e.getMessage());
        }
        return conn;
    }
}

【问题讨论】:

标签: android listview filter simpleadapter


【解决方案1】:

这很简单,这对我有用

editText_search.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) {
            ((SimpleAdapter)All_Reports_Fragment.this.listAdapter).getFilter().filter(s);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

【讨论】:

    【解决方案2】:

    首先,您需要在编辑文本中添加addTextChangeListener

    然后在 Method OnTextChanged 上编写过滤列表的代码。

    这是我使用 ArrayList 进行 ListView 过滤的代码。

    et_search 是我的 EditText,arrayList 包含我要过滤的所有数据,templist 将包含过滤后的项目

    ArrayList templist = new ArrayList<GroupItemsData>();
                    String searchString = et_search.getText().toString();
                    for (int i = 0; i < arrayList.size(); i++) {
                        String currentString = arrayList.get(i).getGroupTitle().toLowerCase(Locale.getDefault());
                        if (currentString.contains(searchString)) {
                            Log.e("Test Test", arrayList.get(i).getGroupTitle());
                            templist.add(arrayList.get(i));
                        }
                    }
                    adapter = new DiscountListViewAdapter(mContext, templist, activity);  
                   listview.setAdapter(mAdapter);
    

    【讨论】:

      猜你喜欢
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多