2015-02-10 99 views
1

我想用製表符(3個選項卡)編寫一個滑動視圖。我希望每個'頁面'是一個活動。 我使用的代碼是tutorial,但不幸的是每個'頁面'只能有一個片段。用選項卡輕掃視圖:活動還是片段?

我試圖做的是將我的活動轉換成碎片(但我仍然得到一些NullPointerException)。

使用片段而不是活動(我使用的是:AlarmManager,OnCheckedChangeListener,PackageManager,AlertDialog等)是否安全? 有沒有更好的方法來解決我的問題?

謝謝。

============================================== ========================

(UPDATE 1)

這裏是從轉換後的片段一些代碼:

public class TabFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { 

private HashMap<String, String> myMap; 
static private TextView usernameView; 
private String mUsername; 
private String permPassword; 
private SharedPreferences pref; 
private SharedPreferences prefCheckBox; 
private TextView trackTextView; 
private TextView logoutTextView; 
private TextView settingsTextView; 
private CheckBox trackCheckBox; 
boolean isTrackingEnabled; 

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

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

    final SessionManager session = new SessionManager(getActivity().getApplicationContext()); 
    myMap = session.getUserDetails(); 
    usernameView = (TextView) getActivity().findViewById(R.id.usernameText); 
    mUsername = myMap.get("username"); 
    usernameView.setText(""); 
    usernameView.setText(mUsername); 

    trackTextView = (TextView) view.findViewById(R.id.tracking_textView); 
    trackCheckBox = (CheckBox) view.findViewById(R.id.track_checkBox); 
    logoutTextView = (TextView) view.findViewById(R.id.log_out); 
    settingsTextView = (TextView) view.findViewById(R.id.settings); 

    prefCheckBox = getActivity().getApplicationContext().getSharedPreferences("Tracking Checkbox", 0); // 0 - for private mode 
    isTrackingEnabled = prefCheckBox.getBoolean("CheckBoxState", false); 
    // display checkbox previous state 
    trackCheckBox.setChecked(isTrackingEnabled); 

    logoutTextView.setOnClickListener(this); 
    trackTextView.setOnClickListener(this); 
    settingsTextView.setOnClickListener(this); 

    trackCheckBox.setOnCheckedChangeListener(this); 

    return view; 
} 

我得到一個NullPointerException爲usernameView.setText("")

02-10 15:03:35.203 27866-27866/com.projectname E/AndroidRuntime﹕ FATAL EXCEPTION: main 

java.lang.NullPointerException 
+0

使用後你的代碼相處的錯誤,所以我們可以理解問題。同樣是的,你應該在使用滑動功能時使用片段 – 2015-02-10 02:08:21

+0

@AshwinNarayanan請檢查我更新的問題。 – 2015-02-10 14:33:00

回答

5

你不能在單個頁面中使用多個活動。

唯一的方法是片段,碎片構建支持此功能。

分段代表 活動中的行爲或用戶界面的一部分。您可以在單個活動中合併多個片段到 構建多窗格用戶界面並在多個活動中重複使用片段。您可以將某個片段視爲活動的模塊化部分,該活動在其自身的生命週期中擁有 ,接收自己的輸入事件,並且可以在活動運行時添加或刪除哪些內容(有點像「sub 」活動「你可以在不同的活動中重複使用)。

轉化活性爲碎片很簡單

  1. 在要擴展活動更改活動的情況下,將其分解
  2. 更改您的onCreate功能onCreateView

如:

活動 -

public class MainActivity extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 
    } 

轉換片段 -

public class MainActivity extends Fragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View view=inflater.inflate(R.layout.activity_main,null); 

     return view; 
    } 
} 

最重要的是

內活動通常我們習慣用這種方法

TextView textView= (TextView) findViewById(R.id.helletxtview); 
找到從XML視圖

裏面片段,這將無法工作,因爲findViewById不分段類中可用,但使用可與根查看幫助這樣

View view=inflater.inflate(R.layout.activity_main,null); 
TextView textView= (TextView) view.findViewById(R.id.helletxtview); 
+0

請檢查我更新的問題。 – 2015-02-10 14:32:06

+0

我不得不改變usernameView =(TextView)getActivity()。findViewById(R.id.usernameText)with usernameView =(TextView)view.findViewById(R.id.usernameText) – 2015-02-10 14:38:08

相關問題