過濾我有MainActivity延伸AppCompatActivity並且它包含我的菜單項,和3個標籤延伸片段各自含有我的列表視圖。如何在我的工具欄中使用Searchview過濾列表視圖?我已經全面搜索,發現使用EditText來過濾listview或實際使用searchview,但不是在具有片段的SimpleCursorAdapter中。我不想實施那種。我如何實現一個過濾器來過濾listview(在三個diff選項卡片段中使用SimpleCursorAdapter)作爲用戶將文本輸入到searchview中?simplecursoradapter列表視圖工具欄與例如搜索查看
這裏是我的MainActivity類
public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[]={"All","Index","Favourite"};
int Numboftabs =3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creating The Toolbar and setting it as the Toolbar for the activity
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
if (pager != null) {
pager.setAdapter(adapter);
}
// Assigning the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
if (tabs != null) {
tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
}
// Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.tabsScrollColor);
}
});
tabs.setViewPager(pager);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
android.support.v7.widget.SearchView searchViewAction = (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchMenuItem); searchViewAction.setSearchableInfo(SManager.getSearchableInfo(getComponentName()));
searchViewAction.setIconifiedByDefault(true);
return true;
}
這裏是我的TAB1片段
public class Tab1 extends Fragment {
ListView listView;
Cursor cursor;
SimpleCursorAdapter listAdapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.tab_1,container,false);
listView = (ListView) v.findViewById(R.id.listview);
DatabaseHelper dbhelper = new DatabaseHelper(this.getContext());
String selectQuery = "SELECT * FROM " + DatabaseContract.SongBook.TABLE_NAME;
final SQLiteDatabase db = dbhelper.getWritableDatabase();
cursor = db.rawQuery(selectQuery, null);
String[] fromColumns = {DatabaseContract.SongBook._ID, DatabaseContract.SongBook.KEY_TITLE};
int[] toView = {R.id.song_id, R.id.song_title};
listAdapter = new SimpleCursorAdapter(this.getContext(), R.layout.songs_ltem_layout, cursor, fromColumns, toView,0);
listAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor aCursor, int columnIndex) {
if (columnIndex == 0) {
String id = aCursor.getString(columnIndex);
TextView textView = (TextView) view;
textView.setText(String.format("%02d", Integer.parseInt(id)));
return true;
}
return false;
}
});
listView.setAdapter(listAdapter);
}
}
我XML文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.katchoua.fgm_hymns.MainActivity">
<item android:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/search"
app:showAsAction="collapseActionView|always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:layout_width="wrap_content" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="match_parent">
<TextView
android:id="@+id/song_id"
android:textSize="20sp"
android:textColor="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="left"/>
<ImageView
android:layout_width="30dip"
android:src="@drawable/musicno"
android:layout_height="30dip" />
<TextView
android:id="@+id/song_title"
android:textStyle="bold"
android:layout_width="0dip"
android:textSize="20sp"
android:singleLine="true"
android:fadingEdge="horizontal"
android:layout_weight="1"
android:gravity="center_vertical"
android:layout_height="match_parent" />
</LinearLayout>
我希望當用戶開始輸入一個字符時,根據他/她是哪個製表符分割,應該根據輸入的文本動態過濾listview,並在關閉searchview時返回原始列表視圖。 感謝您的幫助
第一:'公衆靜態ListView listView; public static Cursor cursor;'糟糕的主意......也是你不關閉遊標......但是回到主題:做一個新的查詢,在適配器中交換遊標,關閉舊遊標,就是這樣 – Selvin
是的,我明白了。首先,listview和cursor沒有聲明爲靜態的,我試圖在他們之外使用它們,然後再聲明它們。任何地方,這不是我現在的問題,因爲我將刪除聲明爲靜態... – katchoua