背景故事:我正在构建一个应用程序作为学校项目。它与API一起使用以获取一些JSON并将其转换并显示给用户。
注意:(玩家是坦克世界的人,我正在使用他们的api)
我目前的结构: 首页 - >导航抽屉 - >玩家 - >选择播放器 - >播放器的详细信息
我的问题: 在播放器的详细视图中,它可以完美打开。当我将方向更改为水平屏幕时,它会“返回”搜索视图。
当我从导航抽屉转到播放器的细节(使用硬编码播放器)并且我将屏幕更改为水平时没有任何反应。
我完全无能为力。
最后一些代码:(请不要这是学校项目,我是android的新手)
我选择只开发api 21+
XML搜索
<?xml version="1.0" encoding="utf-8"?>
<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"
android:id="@+id/someId">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/search_query"
android:hint="@string/search_hint"
android:layout_alignBottom="@+id/search_button"
android:layout_alignParentStart="true"
android:maxLines="1"
android:layout_toStartOf="@+id/search_button" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/search_button"
android:onClick="getPlayers"
android:id="@+id/search_button"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@id/android:list"
android:layout_below="@+id/search_query"
android:layout_alignParentStart="true" />
</RelativeLayout>
XML详细信息
<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"
android:id="@+id/player_detail_fragment"
tools:context="com.jdkmedia.vh8.fragment.PlayerDetailFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/playerName"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/tank_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_below="@+id/playerName"
android:layout_alignParentStart="true"
android:layout_marginTop="40dp" />
</RelativeLayout>
MainActivity导航抽屉
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = MainActivityFragment.newInstance(accessToken);
Log.i(APP + " Class: " + TAG, "Main activity fragment selected");
break;
case 1:
fragment = PlayerSearchMainFragment.newInstance();
Log.i(APP + " Class: " + TAG, "Player search activity fragment selected");
break;
case 2:
// fragment = new TankCompareTopFragment();
Player player = new Player(314134134,"stack overflow");
onPlayerSelected(player);
break;
default:
fragment = MainActivityFragment.newInstance(accessToken);
Log.i(APP + " Class: " + TAG, " default fragment selected");
break;
}
if(fragment != null){
Log.i(APP + " Class: " + TAG, "Fragment is not null - transaction");
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction( )
.replace(R.id.container, fragment, fragment.getClass().getName()).addToBackStack(fragment.getClass().getName()).commit();
}
}
可以在需要时发布任何其他代码文件。
答案 0 :(得分:2)
答案 1 :(得分:1)
您需要保存片段状态。修改你的onCreate以使其类似于此。
onCreate(Bundle save){
super.onCreate(save);
setRetainInstance(true);
}
答案 2 :(得分:0)
来自Android文档 - http://developer.android.com/guide/topics/resources/runtime-changes.html
如果调用OnDestroy(因为它在运行时更改),您的活动将使用onCreate重新启动。
您可以使用onSaveInstanceState()捕获onPause()中的状态,并使用onRestoreInstanceState()在onCreate()期间恢复它。
对于片段,您应该在片段的onCreate()中使用setRetainInstance(boolean)。
之前已经提出了类似的问题。您可以通过stackoverflow搜索找到更多详细信息。