我在搜索视图中使用https://github.com/MiguelCatalan/MaterialSearchView。 我希望在进入材料研究时保持搜索视图的打开..
我目前的代码是
public class search extends AppCompatActivity {
MaterialSearchView searchView;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
searchView = (MaterialSearchView)findViewById(R.id.search_view);
toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Search");
searchView.showSearch();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
MenuItem item = menu.findItem(R.id.action_search);
searchView.setMenuItem(item);
return true;
}
}
根据Nayan Srivastava的回答,将其更新为以下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
searchView = (MaterialSearchView)findViewById(R.id.search_view);
searchView.performClick();
toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Search");
searchView.showSearch();
}
我收到以下错误..
FATAL EXCEPTION: main
Process: com.buckydroid.anonchat, PID: 7850
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.buckydroid.anonchat/com.buckydroid.anonchat.search}: java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6126)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderNode.java:786)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282)
at android.animation.RevealAnimator.<init>(RevealAnimator.java:37)
at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:71)
at com.miguelcatalan.materialsearchview.utils.AnimationUtil.reveal(AnimationUtil.java:86)
at com.miguelcatalan.materialsearchview.MaterialSearchView.setVisibleWithAnimation(MaterialSearchView.java:553)
at com.miguelcatalan.materialsearchview.MaterialSearchView.showSearch(MaterialSearchView.java:519)
at com.miguelcatalan.materialsearchview.MaterialSearchView.showSearch(MaterialSearchView.java:501)
at com.buckydroid.anonchat.search.onCreate(search.java:25)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6126)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
答案 0 :(得分:2)
在onCreateOptionsMenu
中,您可以拨打performClick
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
MenuItem item = menu.findItem(R.id.action_search);
searchView.setMenuItem(item);
searchView.performClick();
return true;
}
这应该可以胜任。
答案 1 :(得分:1)
错误似乎是由于动画重叠造成的。要禁用动画,只需使用:
searchView.showSearch(false);
要回答评论中提到的其他问题(如何将其发送回上一个活动),请使用:
searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
@Override
public void onSearchViewShown() {
}
@Override
public void onSearchViewClosed() {
//To close the current activity
search.this.finish();
}
});