2013-09-12 3 views
1

Я делаю изменение ориентации от портрета к пейзажу и от пейзажа к портрету. Мой код нижеизменение ориентации, получая ту же самую компоновку в фрагменте

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

    //Set titlebar as "[email protected]" 
    getSherlockActivity().getSupportActionBar() 
    .setBackgroundDrawable(getResources().getDrawable(R.drawable.myheaven)); 

    view = inflater.inflate(R.layout.memorial_listing, container, false); 

    setUpView(savedInstanceState); 

    return view; 
} 

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 


    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 

    } 

    } 

и я также добавить это проявить

android:configChanges="orientation|keyboardHidden|screenSize"

и тот же макет я положил в папку макета для портретной и топологий земли для ландшафта, но когда я пытаюсь повернуть экран, если он начинается с портрета, по-прежнему остается в макете из макета. Экран вращается, но не получает правильную папку для отображения макета. Пожалуйста, помогите

+0

см. Это сообщение http://stackoverflow.com/a/17050108/1937802 –

ответ

3
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Get a layout inflater (inflater from getActivity() or getSupportActivity() works as well) 
    LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if(// new orientation is potrait){ 
     // load potrait layout 
    }else{ 
     // load landscape layout 
    } 
} 

Этот метод получает обратный вызов при изменении ориентации. Поэтому раздуйте макет при получении обратного вызова.

P.S: оба макета должны иметь разные названия. Не помещайте ландшафтный макет в папку макета-земли. Когда я столкнулся с этой проблемой, мне пришлось вытащить мой макет из макета и поместить его в папку макета. Хотя это не очень хорошая практика, но в моем случае это работало именно так.

+0

Я следую так, как то, что вы сделали. Да, макет изменен, но данные все еще пусты. пожалуйста, обратитесь к – nick

+0

@nick Если вы используете какой-либо D.S, такой как arraylist/что-то еще, вы можете повторно использовать это, поскольку данные будут там, и вы можете повторно заполнить представления этими данными. В моем случае у меня была коллекция Business Objects и которые были сохранены при изменении ориентации. Так, я повторно использую эту коллекцию и повторно заполняю свое мнение. Если вы найдете лучший подход, пожалуйста, разделите. – guptakvgaurav

+0

Если я хочу изменить только макет, но без повторного заполнения всего набора данных, это возможно? – nick

0

Ниже работ для меня,

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ 

    Log.e("On Config Change","LANDSCAPE Mode"); 
}else{ 

    Log.e("On Config Change","PORTRAIT Mode"); 
} 

Можете ли вы проверить с этим.

+0

спасибо всем, что он работает для меня по этой ссылке http://stackoverflow.com/questions/17116602/using-onconfigurationchanged-in-a-fragment – nick

Смежные вопросы