我尝试使用标签(3个标签)对滑动视图进行编码。我想要每个页面'成为一项活动。 我正在使用此tutorial中的代码,但遗憾的是每个页面都有{{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;
}
我收到了usernameView.setText("")
02-10 15:03:35.203 27866-27866/com.projectname E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
答案 0 :(得分:5)
您不能在一个页面中使用多个活动。
唯一的方法是片段,构建片段以支持此功能。
Fragment表示一个行为或用户界面的一部分 活动。您可以将单个活动中的多个片段组合到一起 构建多窗格UI并在多个活动中重用片段。您 可以将片段视为活动的模块化部分,具有 它自己的生命周期,接收自己的输入事件,你可以 在活动运行时添加或删除(有点像“子” 活动“你可以在不同的活动中重复使用。”
将Activity转换为片段非常简单
例如:
<强>活动强> -
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在Fragment类中不可用,但是使用可以在root视图的帮助下使用
View view=inflater.inflate(R.layout.activity_main,null);
TextView textView= (TextView) view.findViewById(R.id.helletxtview);