2014-10-20 6 views
0

Я пытаюсь работать с учебником и перебежать немного в ловушку. учебник реализует класс SingleFragmentActivity для размещения фрагмента (с файлом XML, чтобы идти вместе с ним.setContentView (int) не работает

Моя проблема в этом SingleFragmentActivity.java классе, есть вызов setContentView (INT), который бросает ошибку , его говорит, что не может найти способ не setContentView (интермедиат) часть фрагмента класса

import android.app.Fragment; 

импорт android.app.FragmentManager;.? импорт android.os.Bundle;

public abstract class SingleFragmentActivity extends Fragment { 
    protected abstract Fragment createFragment(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_fragment); 

    FragmentManager manager = getFragmentManager(); 
    Fragment fragment = manager.findFragmentById(R.id.fragmentContainer); 

    if (fragment == null) { 
     fragment = createFragment(); 
     manager.beginTransaction() 
      .add(R.id.fragmentContainer, fragment) 
      .commit(); 
    } 
    } 
} 

ответ

1

.app.Fragment имеет свой вид, инициализированный в onCreateView. В основном вам нужно использовать надувной элемент для раздувания вашего вида и вернуть его в виде корневого представления в onCreateView.

Reference

И пример в ссылке

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) { 
     // We have different layouts, and in one of them this 
     // fragment's containing frame doesn't exist. The fragment 
     // may still be created from its saved state, but there is 
     // no reason to try to create its view hierarchy because it 
     // won't be displayed. Note this is not needed -- we could 
     // just run the code below, where we would create and return 
     // the view hierarchy; it would just never be used. 
     return null; 
    } 

    ScrollView scroller = new ScrollView(getActivity()); 
    TextView text = new TextView(getActivity()); 
    int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
      4, getActivity().getResources().getDisplayMetrics()); 
    text.setPadding(padding, padding, padding, padding); 
    scroller.addView(text); 
    text.setText(Shakespeare.DIALOGUE[getShownIndex()]); 
    return scroller; 
} 

Кроме того, если вы хотите использовать setContentView, используйте FragmentActivity в библиотеке поддержки.

1

Вы делаете это неправильно. setContentView (INT) будет работать для Activity но ваш класс расширяет фрагмент так что вам нужно, чтобы раздуть XML и возвращает представление в onCreateView

Это, например:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout. activity_fragment, container, false); 
     // Do some Initialization 
     return view; 
    } 

И записочку, не называйте свой класс фрагмента Activity. Это смутит вас :)

1

setContentView не является членом Fragment. Для того, чтобы раздуть представление для фрагмента, вы должны вернуть вид на onCreateView после раздувания его:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_layout, container, false); 
} 
0

Фрагмент использовать onCreateView() и раздувать вместо OnCreate() и onContentView(), которая является специфической для деятельности

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