使用标签滑动视图:活动还是片段?

The*_*imp 1 android fragment android-activity swipeview android-tabs

我正在尝试使用标签(3个标签)对滑动视图进行编码.我希望每个"页面"都成为一个活动.我正在使用本教程中的代码,但遗憾的是每个"页面"只能有一个片段.

我试图做的是将我的活动转换为片段(但我仍然得到一些NullPointerException).

使用Fragment而不是Activity(我正在使用它:AlarmManager,OnCheckedChangeListener,PackageManager,AlertDialog ......)是否安全?有没有更好的方法来解决我的问题?

谢谢.

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

(更新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;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个NullPointerException usernameView.setText("")

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

java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

Jit*_*yan 5

您不能在单个页面中使用多个活动.

唯一的方法是片段,构建片段以支持此功能.

片段表示活动中的行为或用户界面的一部分.您可以在单个活动中组合多个片段以构建多窗格UI,并在多个活动中重用片段.您可以将片段视为活动的模块化部分,它具有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像"子活动",您可以在不同的活动中重用).

将Activity转换为片段非常简单

  1. 如果您正在扩展活动,则将其更改为Fragment
  2. 将onCreate函数更改为onCreateView

例如:

活动 -

public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }   
    }
Run Code Online (Sandbox Code Playgroud)

转换片段 -

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

最重要的

内部活动通常用于使用此方法从xml查找视图

TextView textView= (TextView) findViewById(R.id.helletxtview);
Run Code Online (Sandbox Code Playgroud)

内部片段这不起作用,因为findViewById在Fragment类中不可用,但是使用可以在root视图的帮助下使用这样

View view=inflater.inflate(R.layout.activity_main,null);
TextView textView= (TextView) view.findViewById(R.id.helletxtview);
Run Code Online (Sandbox Code Playgroud)