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

问题描述

当我使用 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 传递到下面给出的另一个意图,结果是从数据库获取位置编号作为项目位置。

包 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);


}

}

解决方法

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

 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 的问题,当我搜索它时,它会从数组中搜索整个字符,如果我只能从中搜索五个字符,我需要一个解决方案,它会正常工作。