【问题标题】:Search in searchview, does not match item在 searchview 中搜索,与项目不匹配
【发布时间】:2017-12-23 21:53:02
【问题描述】:

我的代码的工作方式如下,我有一个ArrayList 的音频,它们各自的名称显示在ListView 中,单击它时会播放音频,到目前为止一切正常。

但是当我进行音频搜索并单击该项目时,它总是播放第一个声音,而不是应该发生的搜索声音,我认为我的适配器“memes.class”有问题,我是新手java / android,不知道可以是什么。

主要活动

public class MainActivity extends AppCompatActivity {
    ListView lv;
    MediaPlayer mp;
    ArrayList<memes> item;
    ArrayAdapter<memes> arrayAdapter;

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

        lv = findViewById(R.id.lv);
        mp = new MediaPlayer();

        item = new ArrayList<>();
        item.add(new memes("Gemidão", R.raw.gemidaoremix));
        item.add(new memes("Nunca nem vi", R.raw.nuncanemvi));
        item.add(new memes("Caga", R.raw.caga));
        item.add(new memes("Cagado de fome", R.raw.cagado));
        item.add(new memes("Cala Boca", R.raw.calaboca));
        item.add(new memes("Canal", R.raw.canal));
        item.add(new memes("Capeta", R.raw.capeta));

        arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, item);
        lv.setAdapter(arrayAdapter);

        //play audio
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                playSong(position);
            }
        });

    }

    //here is where i do the searchview logic
    public boolean onCreateOptionsMenu(final Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.busca, menu);

        MenuItem menuItem = menu.findItem(R.id.sv);

        SearchView searchView = (SearchView) menuItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                arrayAdapter.getFilter().filter(newText);
                return true;
            }
        });

        return super.onCreateOptionsMenu(menu);
    }

    public void playSong(int songIndex) {

        mp.reset();
        mp = MediaPlayer.create(this, item.get(songIndex).getResId());

        mp.start();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mp.release();
    }
}

适配器

memes.class

public class memes {

    private String nome;
    private int resID;

    memes(String nome, int resID) {
        this.nome = nome;
        this.resID = resID;
    }

    public String getNome() {
        return nome;
    }

    int getResId() {
        return resID;
    }

    @Override
    public String toString() {
        return nome;
    }
}

【问题讨论】:

    标签: java android listview audio adapter


    【解决方案1】:

    发生这种情况是因为您从 ArrayList 中获取值,并且在 ListView 和 ArrayList 的搜索索引不同之后。试试这个代码

    public void playSong(int songIndex) {
    
        mp.reset();
        mp = MediaPlayer.create(this, lv.getAdapter().getItem(songIndex).getResId());
    
        mp.start();
    }
    

    【讨论】:

    • mp = MediaPlayer.create(this, arrayAdapter.getItem(songIndex).getResId()); 这对我有用
    【解决方案2】:

    解决方案

    public void playSong(int songIndex) {
    
        mp.reset();
        mp = MediaPlayer.create(this, arrayAdapter.getItem(songIndex).getResId());
    
        mp.start();
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2021-11-16
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多