【问题标题】:Fragment not loading landscape layout when device rotates, reverts back to previous fragment设备旋转时片段不加载横向布局,恢复到上一个​​片段
【发布时间】:2015-03-08 20:42:12
【问题描述】:

我遇到了片段不调用自身横向布局的问题。当您旋转设备时,它会恢复到上一个​​片段并将其放入 logcat:

细分:

我在 Fragment A 中,按一个按钮并被带到 Fragment B。当我旋转设备时,Fragment A 以横向视图显示。

requestLayout() 被 android.widget.ListView{43a67d00 VFED.VC 错误调用。 ......ID 0,0-720,1845} 布局期间:运行第二个布局通道

E/ViewRootImpl﹕sendUserActionEvent() mView == null

如果设备已经旋转并且片段被选中,横向布局加载正常,它只是当你在片段本身中时。

这是片段的代码,希望对你有所帮助!

public class nandos_Fragment extends Fragment implements View.OnClickListener {
    View rootview;
    MapView mMapView;
    private GoogleMap googleMap;
    public static Button scanBtn;
    public static int retrievedResult = 0;
    private static final String TAG = "MyActivity";
    @Nullable
    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootview = inflater.inflate(R.layout.nandos_layout, container, false);
    scanBtn = (Button) rootview.findViewById(R.id.scan_button);
    scanBtn.setOnClickListener(this);
    mMapView = (MapView) rootview.findViewById(R.id.mapView);
    mMapView.onCreate(savedInstanceState);
    mMapView.onResume();// needed to get the map to display immediately
    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }
    googleMap = mMapView.getMap();
    // latitude and longitude
    double latitude = 52.955491;
    double longitude = -1.149885;

    // create marker
    MarkerOptions marker = new MarkerOptions().position(
            new LatLng(latitude, longitude)).title("Nandos Nottingham!");

    // Changing marker icon
    marker.icon(BitmapDescriptorFactory
            .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

    // adding marker
    googleMap.addMarker(marker);
    CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(new LatLng(52.955491, -1.149885)).zoom(15).build();
    googleMap.animateCamera(CameraUpdateFactory
            .newCameraPosition(cameraPosition));
    return rootview;
}

public void onClick(View v) {
    //respond to clicks
    if (v.getId() == R.id.scan_button) {
        //scan
        if (retrievedResult == 0) {
            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
            scanIntegrator.initiateScan();
        }else{}

    }
}
@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
    Random r = new Random();
    int i1 = r.nextInt(80 - 65) + 65;
    if (result != null) {
        scanBtn.setText("Code: " + result + i1);
        retrievedResult = 1;
    }

}

@Override
public void onPause() {
    super.onPause();
    mMapView.onPause();
    scanBtn.setText("Get Offer!");
    retrievedResult = 0;
    result = null;
}

@Override
public void onDestroy() {
    Log.v(TAG, "ON DESTROY");
    mMapView.onDestroy();
    super.onDestroy();
}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.user.ntuio" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="com.ram.googlemapsv2.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>
<application
    android:allowBackup="true"
    android:icon="@drawable/ntsu"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".HomeActivity"
        android:label="@string/title_activity_nav_bar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="****"/>

</application>

</manifest>

    

【问题讨论】:

  • 你能发布你的清单文件吗?
  • 另外,看看这个帖子:stackoverflow.com/questions/18533693/…
  • @DanielNugent 感谢您的回复,我应该特别保存什么状态?是什么导致此错误发生?

标签: android android-layout android-fragments fragment


【解决方案1】:

添加
android:configChanges="keyboardHidden|orientation|screenSize"
之后
android:label="@string/title_activity_nav_bar"

这应该防止旋转设备后刷新。

【讨论】:

  • 这意味着活动不会重新加载,因此不会打开横向布局。我需要加载横向布局。
  • 很遗憾没有修复它,它仍然恢复到以前的片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多