2014-10-20 93 views
0

我正在嘗試通過教程工作,並且遇到了一些障礙。本教程 實現類SingleFragmentActivity主辦片段(與XML文件來與它一起去。setContentView(int)不工作

我的問題是在這SingleFragmentActivity.java類,還有就是被拋出一個錯誤的setContentView(int)的調用,它說,它無法找到的方法是分片類沒有的setContentView(int)的一部分

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。基本上你需要使用inflater來充氣你的視圖,並以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()的這是具體的活動