Проблемы с поиском - PullRequest
1 голос
/ 23 июня 2019

У меня проблема с поиском.Поиск работает, но элемент списка, если вы нажмете на него, останется прежним.пример: элемент 1 = 1, элемент 2 = 2, элемент 3 = 3. при поиске элемента 3 он становится позицией 1, но в то же время, если я нажимаю на него, получается, что элемент 3 = 1, а не3. вот мой кодподскажите что нужно исправить, чтобы все нормально работало?

    private DBHelper mDBHelper;
    private SQLiteDatabase mDb;
    EditText inputSearch;
    private Button btnClear;
    SimpleAdapter adapter;
    ListView listView;
    int textlength = 0;
    GenericListFilter mFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.adress_of_shops);
        btnClear = (Button) findViewById(R.id.btn_clear);
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                inputSearch.setText(null); //очищаем edittext
            }
        });

        inputSearch = findViewById(R.id.inputSearch);

        mDBHelper = new DBHelper(this);

        try {
            mDBHelper.updateDataBase();
        } catch (
                IOException mIOException) {
            throw new Error("UnableToUpdateDatabase");
        }

        try {
            mDb = mDBHelper.getWritableDatabase();
        } catch (
                SQLException mSQLException) {
            throw mSQLException;
        }

        //Найдем компоненты в XML разметке
        final Cursor cursor = mDb.rawQuery("SELECT * FROM shop", null);
        cursor.moveToFirst();


        final ArrayList<HashMap<String, Object>> name = new ArrayList<>();

        //Список параметров конкретного клиента
        HashMap<String, Object> info1;


        //Пробегаем по всем клиентам
        while (!cursor.isAfterLast()) {
            info1 = new HashMap<>();

            //Заполняем клиента
            info1.put("_id", cursor.getString(0));
            info1.put("name", cursor.getString(1));
            info1.put("Lat", cursor.getString(2));
            info1.put("Lng", cursor.getString(3));
            info1.put("timework", cursor.getString(4));
            info1.put("brand", cursor.getString(5));
            info1.put("adress", cursor.getString(6));
            info1.put("PC", cursor.getString(7));
            info1.put("Image", cursor.getInt(8));
            //Закидываем клиента в список клиентов
            name.add(info1);

            //Переходим к следующему клиенту
            cursor.moveToNext();
        }
        cursor.close();

        //Какие параметры клиента мы будем отображать в соответствующих
        //элементах из разметки adapter_item.xml
        String[] from = {"_id","name", "timework", "brand", "adress", "PC", "Image", "Lat", "Lng"};

        //Создаем адаптер

        adapter = new SimpleAdapter(this, name, R.layout.listview_adapter,
                new String[]{"name".toLowerCase()},
                new int[]{R.id.item_list});

        listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);
        inputSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                AdressOfShops.this.adapter.getFilter().filter(s);
                if (!inputSearch.getText().toString().equals("")) {
                    btnClear.setVisibility(View.VISIBLE);
                } else {
                    btnClear.setVisibility(View.GONE);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String lng;
                lng = (String) name.get(position).get("Lng");
                String lat;
                lat = (String) name.get(position).get("Lat");
                Uri uri = Uri.parse("yandexnavi://build_route_on_map?lat_to=" + lat + "&lon_to=" + lng);
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                intent.setPackage("ru.yandex.yandexnavi");
                startActivity(intent);
            }
        });
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
                Intent intent = new Intent(AdressOfShops.this, InfoAcivity.class);
                String timeWork;
                String txName;
                String txBrand;
                String txAdress;
                String txPechka;
                timeWork = (String) name.get(position).get("timework");
                txBrand = (String) name.get(position).get("brand");
                txAdress = (String) name.get(position).get("adress");
                txPechka = (String) name.get(position).get("PC");

                Object uri = name.get(position).get("Image");

                txName = (String) name.get(position).get("name");
                intent.putExtra("timework", timeWork);
                intent.putExtra("brand", txBrand);
                intent.putExtra("adress", txAdress);
                intent.putExtra("PC", txPechka);
                intent.putExtra("name", txName);
                intent.putExtra("Image", uri.toString());
                startActivity(intent);

                return false;
            }
        });

    }




    @Override
    public Filter getFilter() {
        return AdressOfShops.this.mFilter;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...