Настройка макета xml во фрагменте - Android

Я новичок в программировании для Android. Я создал основное действие своего магазина Google в стиле приложения, используя ActionBarSherlock и NavigationTabs, с фрагментами, каждый из которых ссылается на другое действие (фрагмент 1, фрагмент 2 и т. д.), и каждый фрагмент расширяет макет.

Однако я привык создавать макеты в xml, а затем настраивать их в java. Вставлять разный текст в зависимости от времени суток, или по каким-то данным в базе данных, придавать функции кнопкам и т.д. Но в классе Fragment я даже не могу использовать setContentView для работы с каждым текстом или кнопкой, а установка контекста для использования моей базы данных вызывает у меня проблемы.

Как я могу настроить макет xml во фрагменте? Или что было бы правильно сделать?

Вот мой фрагмент:

public class Fragment1 extends SherlockFragment{


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.menu, container, false);

}

person Oscar Méndez    schedule 12.07.2013    source источник


Ответы (3)


Это проще, чем вы думаете. onCreateView instanciate au возвращает представление для вашего фрагмента. Как вы сказали, в простом действии вы устанавливаете (и создаете экземпляр) представление с помощью setContentView(), а затем получаете свои представления с помощью findViewById().

findViewById() запрашивает, чтобы представление вернуло нужный элемент представления, вы можете вызвать его из своего представления, прежде чем возвращать его. Как это:

public class Fragment1 extends SherlockFragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.menu, container, false);

    // For example, getting a TextView
    TextView tv = (TextView) v.findViewById(R.id.myTextView);
    // do your job

    return v;
}
person jujujuijk    schedule 12.07.2013

пока все хорошо, вам просто нужно использовать представление, которое вы надуваете, чтобы получить все.

вот пример

View v = inflater.inflate(R.layout.menu, container, false);

Button b = (Button)v.findViewById(r.id.button1);

return v;
person tyczj    schedule 12.07.2013

внутри onActivityCreated вы можете использовать:

View mView = getView();
TextView textView = (TextView) view.findViewById(R.id.theIdOfTextView);

где theIdOfTextView объявлен внутри R.layout.menu.

getView() возвращает View, которое вы увеличили внутри onCreateView. Вы используете его только после того, как onCreateView будет выполнено

person Blackbelt    schedule 12.07.2013