使用 onlongClick 搜索 Listview 显示错误结果

Posted

技术标签:

【中文标题】使用 onlongClick 搜索 Listview 显示错误结果【英文标题】:Searching Listview with onlongClick showing wrong results 【发布时间】:2020-11-15 20:31:06 【问题描述】:

我从 SQL Server 加载一些数据并显示在列表视图中。当我长按一个项目时,转到一个新活动并将一个字符串发送到新活动。我在列表视图中创建了一个搜索,但是当在列表视图中搜索一个项目并长按它时,它会向新活动发送错误的数据。这是我的代码:

               //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());
                
            );

请帮助将正确的数据与 pwn 位置发送到另一个活动。

【问题讨论】:

没人帮我吗? 【参考方案1】:

我替换了这段代码

 @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();
                

下面有一个新代码:

 @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();

解决了

【讨论】:

以上是关于使用 onlongClick 搜索 Listview 显示错误结果的主要内容,如果未能解决你的问题,请参考以下文章

Android数据绑定onLongClick不起作用

onLongClick 用于 WebView 内的纯文本

Android中onTouchEvent, onClick及onLongClick的调用机制

onTouchEvent onClick onLongClick 调用

监听器无法识别 ExpandableListView OnLongClick

Android中按钮组的onLongClick监听器