2013-03-27 59 views
1

因此,我試圖在我的應用程序上實現此代碼(https://stackoverflow.com/a/14085524/2213992),但迄今爲止沒有成功。如何使用SherlockActionbar實現帶有列表視圖的搜索小部件?

這是我MainActivity.java:

import java.util.List; 

import android.app.SearchManager; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.SearchView; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.SherlockListActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

public class MainActivity extends SherlockListActivity implements 
// public class MainActivity extends ListActivity implements 
     ActionBar.TabListener { 
    private List<Scos> scoss; 
    ScosDataSource datasource; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     datasource = new ScosDataSource(this); 
     datasource.open(); 
     scoss = datasource.findAll(); 
     if (scoss.size() == 0) { 
      createData(); 
      scoss = datasource.findAll(); 
     } 
     refreshDisplay(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getSupportMenuInflater().inflate(R.menu.options, menu); 

     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search) 
       .getActionView(); 
     if (null != searchView) { 
      searchView.setSearchableInfo(searchManager 
        .getSearchableInfo(getComponentName())); 
      searchView.setIconifiedByDefault(false); 
     } 

     SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 

      public boolean onQueryTextChange(String newText) { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(newText); 
       return true; 
      } 

      public boolean onQueryTextSubmit(String query) { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(query); 
       return true; 
      } 
     }; 
     searchView.setOnQueryTextListener(queryTextListener); 

     return super.onCreateOptionsMenu(menu); 

     // return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      return (true); 
     } 
     return (super.onOptionsItemSelected(item)); 
    } 

    public void refreshDisplay() { 

     ArrayAdapter<Scos> adapter = new ScosListAdapter(this, scoss); 
     setListAdapter(adapter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     datasource.open(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     datasource.close(); 

    } 

    private void createData() { 
    } 

} 

這是我option.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/menu_search" 
    android:actionViewClass="com.actionbarsherlock.widget.SearchView" 
    android:showAsAction="ifRoom|collapseActionView" 
    android:icon="@drawable/ic_action_search" 
    android:title="@Search"> 
</item> 

</menu> 

感謝您的幫助提前。

哈維爾

+0

目前發生了什麼不工作? – Kirk 2013-03-28 01:08:20

+0

我真的不知道如何連接searhview過濾器代碼:adapter.getFilter()。filter(newText);到我的列表視圖適配器:ArrayAdapter adapter = new ScosListAdapter(this,scoss); – 2013-03-28 17:20:43

+0

由於我發佈的解決方案應該解決您的問題,將searchview與適配器連接起來。 – 2013-06-04 16:02:34

回答

1

我希望它會有幫助,因爲我有同樣的問題。

要使用適配器,最好的方法是該類實現SearchView.OnQueryTextListener,然後您不必創建內部類,並且您將擁有該適配器。

在你的代碼將作爲東西:

public class MainActivity extends SherlockListActivity implements SearchView.OnQueryTextListener 

,然後在課堂上,你必須定義方法。適配器將成爲您的類ArrayAdapter適配器中的適配器。但是你應該把它定義爲課堂上的私人。

public boolean onQueryTextChange(String newText) { 
    // this is your adapter that will be filtered 
    adapter.getFilter().filter(newText); 
    return true; 
} 

public boolean onQueryTextSubmit(String query) { 
    // this is your adapter that will be filtered 
    adapter.getFilter().filter(query); 
    return true; 
} 

在行如果要設置:

searchView.setOnQueryTextListener(queryTextListener); 

應該是:

searchView.setOnQueryTextListener(this); 

如果你有任何問題,讓我知道,我是一個類似的問題,今天讀你的問題沒有答案。

相關問題