Android 使用选项卡滑动视图:活动还是片段?
我正在尝试用标签(3个标签)对滑动视图进行编码。我希望每个“页面”都是一个活动。 我在这里使用代码,但不幸的是,每个“页面”只能有一个片段 我试图做的是将我的活动转换成片段(但我仍然得到一些NullPointerException) 使用片段而不是活动(我在其中使用:AlarmManager、OnCheckedChangeListener、PackageManager、AlertDialog…)安全吗? 有没有更好的办法解决我的问题 多谢各位 ====================================================================== (更新1) 以下是转换片段中的一些代码:Android 使用选项卡滑动视图:活动还是片段?,android,android-activity,fragment,android-tabs,swipeview,Android,Android Activity,Fragment,Android Tabs,Swipeview,我正在尝试用标签(3个标签)对滑动视图进行编码。我希望每个“页面”都是一个活动。 我在这里使用代码,但不幸的是,每个“页面”只能有一个片段 我试图做的是将我的活动转换成片段(但我仍然得到一些NullPointerException) 使用片段而不是活动(我在其中使用:AlarmManager、OnCheckedChangeListener、PackageManager、AlertDialog…)安全吗? 有没有更好的办法解决我的问题 多谢各位 ==========================
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;
}
不能在一个页面中使用多个活动 唯一的方法是碎片,碎片是为了支持这个特性而构建的 片段表示用户界面中的一个行为或一部分 活动。您可以在单个活动中组合多个片段以 构建多窗格UI并在多个活动中重用片段。你 可以将片段视为活动的模块化部分,它具有 它自己的生命周期,接收自己的输入事件,您可以 在活动运行时添加或删除(有点像“sub “活动”,可以在不同的活动中重用) 将活动转换为片段非常简单
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;
}
}
转换片段-
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;
}
}
最重要的
在活动内部,我们通常使用此方法从xml中查找视图
TextView textView= (TextView) findViewById(R.id.helletxtview);
在片段内部,这将不起作用,因为findViewById在片段类中不可用,但use可以在根视图的帮助下使用,如下所示
View view=inflater.inflate(R.layout.activity_main,null);
TextView textView= (TextView) view.findViewById(R.id.helletxtview);
不能在一个页面中使用多个活动 唯一的方法是碎片,碎片是为了支持这个特性而构建的 片段表示用户界面中的一个行为或一部分 活动。您可以在单个活动中组合多个片段以 构建多窗格UI并在多个活动中重用片段。你 可以将片段视为活动的模块化部分,它具有 它自己的生命周期,接收自己的输入事件,您可以 在活动运行时添加或删除(有点像“sub “活动”,可以在不同的活动中重用) 将活动转换为片段非常简单
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;
}
}
转换片段-
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;
}
}
最重要的
在活动内部,我们通常使用此方法从xml中查找视图
TextView textView= (TextView) findViewById(R.id.helletxtview);
在片段内部,这将不起作用,因为findViewById在片段类中不可用,但use可以在根视图的帮助下使用,如下所示
View view=inflater.inflate(R.layout.activity_main,null);
TextView textView= (TextView) view.findViewById(R.id.helletxtview);
发布错误代码,以便我们了解问题。同样是的,在使用刷卡时应该使用碎片functions@AshwinNarayanan请检查我更新的问题。发布错误,您正在处理代码,以便我们了解问题。同样是的,在使用刷卡时应该使用碎片functions@AshwinNarayanan请检查我更新的问题。我必须将usernameView=(TextView)getActivity().findViewById(R.id.usernameText)更改为usernameView=(TextView)视图。findViewById(R.id.usernameText)我必须更改usernameView=(TextView)getActivity().findViewById(R.id.usernameText),其中usernameView=(TextView)view.findviewbyd(R.id.usernameText)