在这里,我有一个toolbar在Activity其中包含SearchView.而且该活动有多个片段.其中一个主要碎片本身内部还有10个碎片.所有10个片段都在列表视图中显示数据.现在,我试图通过筛选片段的所有列表SearchView中MainActivity.但它从不过滤每个片段的列表.现在我告诉你我是如何实现它的.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
changeSearchViewTextColor(searchView);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
Fragment.java
public class CurrencyFragment2 extends android.support.v4.app.Fragment implements SearchView.OnQueryTextListener {
@Override
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
if (menuVisible && getActivity() != null) {
SharedPreferences pref = getActivity().getPreferences(0);
int id = pref.getInt("viewpager_id", 0);
if (id == 2)
setHasOptionsMenu(true); …Run Code Online (Sandbox Code Playgroud) 我们可以使用ActionbarSherlock在Android 2.2中实现SeachView.
我使用以下代码,它在3.0中正常工作但在2.2中不工作
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater().inflate(R.menu.main_menu, menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
// set up a listener for the refresh item
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
System.out.println("onQueryTextChange----------");
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// Do something
System.out.println("onQueryTextSubmit----------");
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我在2.2上遇到以下错误
at 01-23 17:31:53.230: W/MenuInflater(20214): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-23 17:31:53.230: W/MenuInflater(20214): at …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用Action Bar,其中包含自定义SearchView.我想在用户点击搜索字段中的输入按钮时使用一些自定义代码.但我无法找到一种方法来捕捉用户点击SearchView中的输入按钮的那一刻.
现在我尝试了几种捕获搜索操作的方法,但我似乎无法找到它.
我的按钮定义如下:
<item
android:id="@+id/action_bar_search"
android:title="Search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="always"
android:actionViewClass="-package-.CustomSearchView"
/>
Run Code Online (Sandbox Code Playgroud)
这属于CustomSearchView类:
public class CustomSearchView extends SearchView implements OnClickListener, android.view.View.OnKeyListener{
public CustomSearchView(Context context) {
super(context);
this.setOnSearchClickListener(this);
this.setSubmitButtonEnabled(true);
this.setOnClickListener(this);
this.setOnKeyListener(this);
}
@Override
public void onClick(View v) {
Log.d("SEARCH", "Onclick! " + this.getQuery());
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.d("SEARCH", "Search onkey");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到我尝试了两种方法:
有没有人有办法使用此SearchView进行自定义搜索操作?
更新:
如下面PJL所述:您不需要自定义对话框来覆盖此行为.普通的SearchView小部件可以正常工作.
我的活动中有工具栏,我曾尝试从菜单添加搜索视图,但无法在工具栏中添加搜索视图,如何在我的活动工具栏中添加搜索视图.
我有一个主要活动有2个片段.主要活动SearchView在操作栏中有一个.这两个片段都有一个包含大量字符串的列表List<String>.
流程是:
用户输入片段I - >选择一个字符串(比如说Selection1) - >基于Selection1,在第二个片段中填充一个字符串列表 - >这里用户选择第二个字符串--->基于这两个处理字符串.
现在,由于两个片段都包含大量字符串,因此用户在SearchView其中输入一个查询,该查询过滤列表并将其缩小为显示在中的较小列表SearchableActivity.
现在的问题是如何SearchableActivity获取这两个访问权限以List<String>根据查询过滤它们并向用户显示缩减列表.
目前我所做的是被覆盖onSearchRequested并将数据传递为
@Override
public boolean onSearchRequested()
{
Bundle appData = new Bundle();
appData.putString(FRAGMENT_ID, "Fragment_A");
appData.putStringArrayList(SEARCH_LIST, searchList);
startSearch(null, false, appData, false);
return true;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法或标准方法来处理这个问题,即一个允许数据基于我的MainActivity实现SearchableActivity?
编辑:添加代码.显示数据的设置方式Fragment.onDataReceived从HttpManager接收数据的中调用.
@Override
public void onDataReceived(String type,final Object object)
{
switch(type)
{
case PopItConstants.UPDATE_LIST:
getActivity().runOnUiThread(new Runnable() {
@Override
public …Run Code Online (Sandbox Code Playgroud) android android-fragments android-activity searchview android-search
我试图在http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html中将FragmentTabs实现为illiustrated .一切顺利,直到我这样做:
我从一个标签开始了许多不同的片段,如:
TAB1 - >片段1 ---> fragment2 ---> fragment3
TAB2
但是当我切换到tab2并再次回到tab1时,我得到的是fragment1屏幕而不是fragment3(即我在第一个标签中有3个片段,而我在第3个片段上,在切换到第二个标签后我再来到第一个标签上,我是被带到第一个片段而不是第三个)..任何人都可以告诉可能是什么概率?
@Override
public void onTabChanged(String tabId) {
TabInfo newTab = mTabs.get(tabId);
if (mLastTab != newTab) {
FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
if (mLastTab != null) {
if (mLastTab.fragment != null) {
ft.detach(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(mActivity,
newTab.clss.getName(), newTab.args);
ft.add(mContainerId, newTab.fragment, newTab.tag);
} else {
ft.attach(newTab.fragment);
}
}
mLastTab = newTab;
ft.commit();
mActivity.getSupportFragmentManager().executePendingTransactions();
}
}
Run Code Online (Sandbox Code Playgroud)
当我评论attach()和detatch()时,我得到了这个:

我按照@David在本主题中建议的SearchView方式实现了。有谁知道如何将最近的查询建议添加到 Fragment 中的 SearchView 中? Fragment
我正在尝试在shreyaloclistfragment中创建列表搜索视图.我在下面的行中得到NullPointerException
final SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
Run Code Online (Sandbox Code Playgroud)
我的方法是
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater ) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate( R.menu.menu_search, menu);
System.out.println( "inflating menu");
final SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
showFilteredItems( newText );
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return;
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.sears.syw.FragmentShopsTab.onCreateOptionsMenu(FragmentShopsTab.java:52)
at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:55)
at
com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:559 )
at
com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSh erlockNative.java:65)
at
Run Code Online (Sandbox Code Playgroud)