Search code examples
javaandroidandroid-studiolistviewsearchview

Searching Listview with onlongClick showing wrong results


I load some data and show in a list view from SQL server. when I long click on a Item go to a new activity and send a string to the new activity. i create a search in list view but when search a item in list view and long click on it send wrong data to new activity.this is my codes:

               //Connect to SQL server and read data
        try {

            connect = CONN(un, passwords, db, ip);
            Statement statement = connect.createStatement();
            rs = statement.executeQuery(query);
            List<Map<String, String>> data = null;
            data = new ArrayList<Map<String, String>>();
            //creating list of sms text
            sms = new ArrayList<String>();


            while (rs.next()) {
                
                Map<String, String> datanum = new HashMap<String, String>();
                datanum.put("A", rs.getString("faDateTime"));
                datanum.put("B", rs.getString("smsText"));
                data.add(datanum);
                //creating list of sms text
                smstext = rs.getString("smsText");
                sms.add(smstext);

            }
            String[] from = {"A", "B"};
            int[] views = {R.id.tx1, R.id.tx2};
            ADA = new SimpleAdapter(OpenserviceActivity.this,
                    data, R.layout.templateforgrid, from, views);
            lv1 = (ListView) findViewById(R.id.lv1);
            lv1.setAdapter(ADA);
           

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

            //enables filtering for the contents of the given ListView
            lv1.setTextFilterEnabled(true);


            //on long click  list view
            lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                               int pos, long ids) {

                    // TODO Auto-generated method stub

                    Log.v("long clicked","pos: " + pos);
                    //seprate the first line
                    String[] substrings = sms.get(pos).split(" ");
                    //seprate numbers from sms body
                    number = substrings[1].replaceAll("[^0-9]", "").trim();
                    Toast.makeText(getApplicationContext(),"ID: " + number, Toast.LENGTH_LONG).show();
                    //go to code sender
                    Intent intent = new Intent(OpenserviceActivity.this, Codesender.class);
                    intent.putExtra("number", number);
                    startActivity(intent);
                    finish();

                    return true;
                }
            });


            lvsearch = (EditText) findViewById(R.id.etsearch);

            lvsearch.addTextChangedListener(new TextWatcher() {

                public void afterTextChanged(Editable s) {
                }

                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }

                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    ADA.getFilter().filter(s.toString());
                }
            });

please help send correct data with pwn position to another activity.


Solution

  • i replace this code

     @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                               int pos, long ids) {
    
                    // TODO Auto-generated method stub
    
                    Log.v("long clicked","pos: " + pos);
                    //seprate the first line
                    String[] substrings = sms.get(pos).split(" ");
                    //seprate numbers from sms body
                    number = substrings[1].replaceAll("[^0-9]", "").trim();
                    
    

    with a new code below:

     @Override
                    public boolean onItemLongClick(AdapterView<?> parent, View view,
                                                   int pos, long ids) {
    
                        String text = ((TextView) view.findViewById(R.id. tx2)).getText().toString();
    
                        // TODO Auto-generated method stub
    
                        Log.v("long clicked","pos: " + pos);
                        //seprate the first line
                        String[] substrings = text.split(" ");
                        //seprate ID numbers from sms body
                        number = substrings[1].replaceAll("[^0-9]","").trim();
    

    and solved