带有项目单击侦听器的列表视图在搜索视图中获取错误数据

Posted

技术标签:

【中文标题】带有项目单击侦听器的列表视图在搜索视图中获取错误数据【英文标题】:listview wih item click listener fetch wrong data in searchview 【发布时间】:2021-05-04 09:59:02 【问题描述】:

当我使用 itemclicklistener 将数据从 firebase 获取到 listview 并且工作正常时,

但是当我向列表视图添加一个搜索视图时,搜索视图将在此处获取 itementer 图像描述,但 itemclicklistener 显示错误的结果(显示其位置),请帮助。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btMenu = findViewById(R.id.btMenu);

    sr_txt = findViewById(R.id.sr_txt);
    listView = findViewById(R.id.listView);
    databaseReference = FirebaseDatabase.getInstance().getReference("dreamapp");
    dream1 = new Dream();
    title_list = new ArrayList<>();
    answer_list = new ArrayList<>();


    arrayAdapter = new ArrayAdapter<>(this,R.layout.item,R.id.item,title_list);
    databaseReference.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) 

            for (DataSnapshot d:snapshot.getChildren())
            
                dream1 = d.getValue(Dream.class);
                title_list.add(dream1.getTitle());
                answer_list.add(dream1.getAnswer());
            



            listView.setAdapter(arrayAdapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int i,long id) 
                    Intent intent = new Intent(MainActivity.this, answer.class);
                    String p=answer_list.get(i);
                    intent.putExtra("answer",p);
                    startActivity(intent);



                
            );

        

        @Override
        public void onCancelled(@NonNull DatabaseError error) 

        
    );


    sr_txt.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
        @Override
        public boolean onQueryTextSubmit(String query) 
            MainActivity.this.arrayAdapter.getFilter().filter(query);

            return false;
        

        @Override
        public boolean onQueryTextChange(String newText) 
            MainActivity.this.arrayAdapter.getFilter().filter(newText);

            return false;
        
    );



我已将答案列表值从 firebase 传递到下面给出的另一个意图,其中结果是从我需要作为 itemsposition 的数据库中获取的位置编号。

包 com.example.dreamapp;

导入androidx.appcompat.app.AppCompatActivity;

导入android.os.Bundle; 导入android.widget.TextView;

公共类答案扩展了 AppCompatActivity

TextView textView1;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_answer);

    textView1 = findViewById(R.id.answertext);
    
    String answertxt = getIntent().getStringExtra("answer");
    textView1.setText(answertxt);



【问题讨论】:

您可以尝试评论MainActivity.this.arrayAdapter.getFilter().filter(query); 吗? 我在 searchView sr_txt 中给出了这个。 SetOnQueryTextListener 并且搜索正在工作,它列出了来自 listview 的结果,但在 onclicklistener 上它不起作用,它给了我 listview 的位置而不是项目的位置。 当然会给你项目在listView中的位置!如果您需要一些标识符,您必须在您的对象中添加字段,您可以通过它了解它是什么项目 你能解释一下吗? 【参考方案1】:

您好,我找到了解决方案,当我添加了一个 arrayadapter 和 listview ,然后我在 searchview 中使用它然后它起作用了,如果我在其中搜索确切的单词,它就会得到结果,

 sr_txt.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
        @Override
        public boolean onQueryTextSubmit(String query) 
            MainActivity.this.arrayAdapter.getFilter().filter(query);
            MainActivity.this.arrayAdapter2.getFilter().filter(query);
            return false;
        

        @Override
        public boolean onQueryTextChange(String newText) 
            MainActivity.this.arrayAdapter.getFilter().filter(newText);
            MainActivity.this.arrayAdapter2.getFilter().filter(newText);
            return false;
        
    );

和搜索视图

 sr_txt.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
        @Override
        public boolean onQueryTextSubmit(String query) 
            MainActivity.this.arrayAdapter.getFilter().filter(query);
            MainActivity.this.arrayAdapter2.getFilter().filter(query);
            return false;
        

        @Override
        public boolean onQueryTextChange(String newText) 
            MainActivity.this.arrayAdapter.getFilter().filter(newText);
            MainActivity.this.arrayAdapter2.getFilter().filter(newText);
            return false;
        
    );

但我仍然面临 searchView 的问题,当我搜索它时,它会从数组中搜索整个字符,如果我只能从中搜索五个字符,我需要一个解决方案,它会正常工作。

【讨论】:

以上是关于带有项目单击侦听器的列表视图在搜索视图中获取错误数据的主要内容,如果未能解决你的问题,请参考以下文章

使用带有自定义 baseadapter 的 arraylist 错误地删除列表视图项位置

单击列表视图中自定义单元格中按钮的侦听器

如何从简单列表视图的按钮打开新活动

单击列表视图项时从 SQLite 数据库中获取行 ID

如何从列表视图中的项目单击中获取歌曲在android中

Android:自定义列表视图列表元素点击