9

У меня есть этот код в фрагментеИспользование onConfigurationChanged в фрагменте

public class TestOne extends Fragment { 

    View view = null; 

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

     LayoutInflater inflater2 = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater2.inflate(R.layout.testone, null); 

     Toast.makeText(getActivity(), "Rotate fragment", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Toast.makeText(getActivity(), "onCreate Fragment", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.testone, null); 

     Toast.makeText(getActivity(), "onCreateView fragment", Toast.LENGTH_SHORT).show(); 

     return view; 
    } 

} 

То, что я пытаюсь сделать то, что, когда я повернуть телефон, я не хочу, чтобы методы, которые будут выполняться снова. Но я хочу снова вызвать XML-макет, чтобы загрузить xml-файл папки-макета.

Этот код не дает какой-либо ошибки, просто не работает и не понимают причину ..

Я очень заинтересован в этом его с помощью onConfiguratonChanged

Я признателен за любую помощь.

Спасибо и рассматривает

+0

Методы в вашем 'FragmentActivity' – mjosh

+0

есть методы, которые должны быть в фрагменте – Sergio76

+0

И зачем это нужно? В 'onConfigurationChanged' вы просто раздуваете макет и назначаете его одному из полей' Activity'. Я бы посоветовал вам использовать 'setRetainInstance (true)' вместо 'onConfigurationChanged'. Как ручное решение, я думаю, вы всегда можете удалить все виды из 'getView()' и снова подключить вновь раздутый макет. – Luksprog

ответ

23

В onCreateView создать FrameLayout - это контейнер для вас fragmenView. Затем создайте свой R.layout.testone и добавьте его в frameLayout.

В onConfigurationChanged очистить FrameLayout, создать R.layout.testone и добавить его в frameLayout.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    frameLayout = new FrameLayout(getActivity()); 
    LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.testone, null); 
    frameLayout .addView(view); 
    return frameLayout; 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    frameLayout. removeAllViews(); 
    LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.testone, null); 
    frameLayout .addView(view); 
} 

Теперь все будет работать так, как вы хотите!

+0

Спасибо, отличное решение для меня! –

+0

у него много проблем – Satheesh

+0

Умное решение, отлично сработало для меня –

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

  • Нет связанных вопросов^_^