安卓小白,在跟着视频教程学。最近在搞一个 Tabbed Layout,我利用了最新得Android Studio中得模板直接创建得。但是创建出来得代码和视频教学中完全不一样。
首先在java文件夹下, 会自动创建出以下内容:
创建了一个ui.main文件夹:
- PageViewModule
- PlaceholderFragment
- SectionsPage
外加一个常规 MainActivity 用于关联 Tabbed Layout
Layout文件:
activity_mainxml
fragment_main.xml
我跟着代码,目前能够理解 PageViewModule 就是将 Tab 和 Fragment 进行关联,然后通过 PlaceHolderFragment 进行展示,但是我无法阅读其中得代码。特别是PlaceholderFragment 和 SectionsPage 得代码,也没有办法通过 switch 来切换不同得Fragment。还请各位专家帮忙解读一下,在网上搜了很久也没有找到有关这种结构形式得解读。
SectionPagerAdapter.java
public Fragment getItem(int position) {
// 想通过一个switch来进行Fragment切换但是失败
// 一直显示 Fragment_main 得layout
switch(position){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
}
return null;
// return PlaceholderFragment.newInstance(position + 1);
}
PlaceholderFragment.java
private static final String ARG_SECTION_NUMBER = "section_number";
private PageViewModel pageViewModel;
// 通过Placeholder来创建Layout
public static PlaceholderFragment newInstance(int index) {
PlaceholderFragment fragment = new PlaceholderFragment();
//为什么我们这里需要一个bundle
Bundle bundle = new Bundle();
bundle.putInt(ARG_SECTION_NUMBER, index);
fragment.setArguments(bundle);
return fragment;
}
@Override
// 在这里 onCreate 到底应该如何解读? pageViewModel到底是什么?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageViewModel = ViewModelProviders.of(this).get(PageViewModel.class);
int index = 1;
if (getArguments() != null) {
index = getArguments().getInt(ARG_SECTION_NUMBER);
}
pageViewModel.setIndex(index);
}
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 猜想因为这边一直都是创建 fragment1,因此只能显示一个 fragment
// 但是到底如何切换不同得Fragment呢
View root = inflater.inflate(R.layout.fragment1, container, false);
final TextView textView = root.findViewById(R.id.section_label);
pageViewModel.getText().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
PageViewModel.java
private MutableLiveData<Integer> mIndex = new MutableLiveData<>();
private LiveData<String> mText = Transformations.map(mIndex, new Function<Integer, String>() {
@Override
public String apply(Integer input) {
return "Hello world from section: " + input;
}
});
public void setIndex(int index) {
mIndex.setValue(index);
}
public LiveData<String> getText() {
return mText;
}
还请各位高手帮忙解读一下,这个到底是怎么生成得Layout,为什么我的switch为什么没有用? Placeholder它到底是怎么工作得?