java – 一个Activity和屏幕旋转中的两个SearchView
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 一个Activity和屏幕旋转中的两个SearchView,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2217字,纯文字阅读大概需要4分钟。
内容图文
![java – 一个Activity和屏幕旋转中的两个SearchView](/upload/InfoBanner/zyjiaocheng/699/01d59f945a124b4e8f7d23db82d9a0b3.jpg)
我在一个xml布局中有两个SearchView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SearchView
android:id="@+id/my_first_custom_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</SearchView>
<SearchView
android:id="@+id/my_second_custom_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/my_first_custom_view" >
</SearchView>
</RelativeLayout>
我通过setContentView()将此布局扩展到我的MainActivity.然后我打电话给方法
setQuery()为彼此.
屏幕旋转之前一切正常.当我旋转屏幕时,每个searchView都有文本“World”而不是“Hello”和“World”.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SearchView firstSearchView = (SearchView) findViewById(R.id.my_first_custom_view);
SearchView secondSearchView = (SearchView) findViewById(R.id.my_second_custom_view);
firstSearchView.setQuery("Hello!", false);
secondSearchView.setQuery("World", false);
}
}
有人可以解释出了什么问题吗?
解决方法:
SearchView使用通过膨胀布局文件产生的视图作为其内容.因此,活动布局中使用的所有SearchView(如您的案例)都将具有相同ID的内容视图.当Android尝试保存状态以处理配置更改时,它将看到来自SearchViews的EditTexts具有相同的ID,并且它将为所有这些恢复相同的状态.
处理此问题的最简单方法是使用Activity的onSaveInstanceState和onRestoreInstanceState,如下所示:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// state for the first SearchView
outState.putString("sv1", firstSearchView.getQuery().toString());
// state for the second SearchView
outState.putString("sv2", secondSearchView.getQuery().toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// properly set the state to balance Android's own restore mechanism
firstSearchView.setQuery(savedInstanceState.getString("sv1"), false);
secondSearchView.setQuery(savedInstanceState.getString("sv2"), false);
}
另外看看这个related question.
内容总结
以上是互联网集市为您收集整理的java – 一个Activity和屏幕旋转中的两个SearchView全部内容,希望文章能够帮你解决java – 一个Activity和屏幕旋转中的两个SearchView所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。