SearchViewがAndroidで閉じられた後にListViewをリセットする方法?
-
20-12-2019 - |
質問
私は、ユーザーがクエリを検索するときに、フィルタリングされているBaseadapter(一致する項目のみが表示されます)でListViewを実装しましたが、検索バーにテキストがもうないと検索アクションが閉じられている場合は、mすべての項目を持つListViewをリセットできません。私は以下のコードを投稿しています。誰かがListViewをリセットする方法を私に助けてくれることができます。私は、空の文字列を渡すことによってoncloseListenerのonclose()メソッドのフィルタ()を呼び出しましたが、それは助けをしません。
活動クラス
public class MainPage extends ActionBarActivity {
MainPageAdapter mainPageAdapter;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_page);
mainPageAdapter = new MainPageAdapter();
ListView listView = (ListView)findViewById(R.id.main_list);
listView.setAdapter(mainPageAdapter);
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getApplicationContext(), StatePage.class);
intent.putExtra("page number", i);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main_page, menu);
// return true;
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
// MenuItem menuItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setQueryHint("Search State..");
SearchView.OnQueryTextListener textListener = new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String s) {
mainPageAdapter.getFilter().filter(s);
return true;
}
@Override
public boolean onQueryTextChange(String s) {
mainPageAdapter.getFilter().filter(s);
return true;
}
};
searchView.setOnQueryTextListener(textListener);
SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){
@Override
public boolean onClose() {
return false;
}
};
searchView.setOnCloseListener(closeListener);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch(id)
{
case R.id.action_search:
return true;
case R.id.action_overflow:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
.
アダプタクラス
public class MainPageAdapter extends BaseAdapter implements Filterable {
public ArrayList<String> alist = new ArrayList<String>();
private QueryFilter queryFilter;
ArrayList<String> temp;
ArrayList<String> filterStateList;
public MainPageAdapter()
{
Thread thread1 = new Thread(){
public void run(){
alist.add("Apple");
alist.add("Samsung");
alist.add("HTC");
//list goes on...
temp = alist;
}
};
thread1.start();
}
@Override
public int getCount() {
if(alist != null){
return alist.size();
}
else{
return 0;
}
}
@Override
public Object getItem(int i) {
if(alist != null){
return alist.get(i);
}
else{
return null;
}
}
@Override
public long getItemId(int i) {
return i;
}
public boolean hasStableIds()
{
return true;
}
public int getViewTypeCount(){
return 1;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view == null)
{
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
view = inflater.inflate(R.layout.state_list, viewGroup, false);
}
String state = alist.get(i);
TextView stateTextView = (TextView)view.findViewById(R.id.state_view);
stateTextView.setText(state);
ImageView imageView = (ImageView)view.findViewById(R.id.flag_view);
switch(i)
{
case 0:
imageView.setImageResource(R.drawable.apple);
break;
case 1:
imageView.setImageResource(R.drawable.samsung);
break;
case 2:
imageView.setImageResource(R.drawable.HTC);
break;
//list goes on...
default:
}
return view;
}
@Override
public Filter getFilter() {
if(queryFilter == null){
queryFilter = new QueryFilter();
}
return queryFilter;
}
private class QueryFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults filterResults = new FilterResults();
if(charSequence!= null && charSequence.length()> 0)
{
filterStateList = new ArrayList<String>();
for(int i=0; i< temp.size(); i++)
{
if((temp.get(i).toLowerCase().contains(charSequence.toString().toLowerCase())))
{
filterStateList.add(temp.get(i));
}
}
filterResults.count = filterStateList.size();
filterResults.values = filterStateList;
}
else
{
filterResults.count = alist.size();
filterResults.values = alist;
}
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
alist = (ArrayList<String>) filterResults.values;
notifyDataSetChanged();
}
}
}
. 解決
コードにフォローをフォローして、機能するかどうかを確認する
final MenuItem searchMenuItem = optionsMenu.findItem(R.id.search);
final SearchView searchView =
(SearchView) searchMenuItem.getActionView();
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean queryTextFocused) {
if(!queryTextFocused) {
searchMenuItem.collapseActionView();
searchView.setQuery("", false);
}
}
});
.
または以下の作業
SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){
@Override
public boolean onClose() {
mainPageAdapter.getFilter().filter("");
return true;
}
};
. 他のヒント
:
のようなものをたくさん試すことができますlistView.setAdapter(null);
adapter.clear(); adapter.notifyDataSetChanged()
yourcollection.clear(); adapter.notifyDataSetChanged();
//this removes all the views from your layout inside a tag like linearlayout
linearlayout.removeAllViews();
.
あなたに最も合うものを使う
所属していません StackOverflow