[英]Does ActionBarSherlock 4.2 support search suggestions for a SearchView?
[英]Search in searchview, does not match item
我的代碼工作如下,我有一個音頻的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();
}
}
適配器
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;
}
}
發生這種情況是因為您從ArrayList中獲取了值,並且ListView和ArrayList的搜索索引不同之后。 試試這個代碼
public void playSong(int songIndex) {
mp.reset();
mp = MediaPlayer.create(this, lv.getAdapter().getItem(songIndex).getResId());
mp.start();
}
public void playSong(int songIndex) {
mp.reset();
mp = MediaPlayer.create(this, arrayAdapter.getItem(songIndex).getResId());
mp.start();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.