gpt4 book ai didi

java - 一个 Activity 和屏幕旋转中的两个 SearchView

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:45 24 4
gpt4 key购买 nike

我在一个 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 将扩展布局文件产生的 View 用作其内容。因此, Activity 布局中使用的所有 SearchViews(如您的情况)都将具有相同 ID 的内容 View 。当 Android 将尝试保存状态以处理配置更改时,它会看到 SearchViews 中的 EditTexts 具有相同的 id,它将为所有的恢复相同的状态他们。

处理此问题的最简单方法是使用 ActivityonSaveInstanceStateonRestoreInstanceState,如下所示:

@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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com