【发布时间】:2020-02-26 11:57:16
【问题描述】:
我按照本教程实现 ViewPager(不创建 tablayout):https://www.javacodegeeks.com/2013/04/android-tutorial-using-the-viewpager.html
它有效,但我遇到了麻烦:
当我尝试执行 findFragmentById(R.id.my_fragment) 时,它返回 null。而且我认为这是因为在我的activity_main.xml 中除了 ViewPager 没有别的东西
我尝试在我的activity_main.xml 中添加一个<fragment>,现在我可以使用findFragmentById(R.id.my_fragment) 访问我的片段,但我的 ViewPager 现在无法工作
有办法访问我的 Fragment 吗?我需要访问他的视图。
这是我的activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.viewpager.widget.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>`enter code here`
这是我的 MainActivity 的 onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((int) R.layout.activity_main);
scan_fragment = (ScanFragment) getSupportFragmentManager().findFragmentById(R.id.scan_fragment);
nfcButton = (ImageButton) findViewById(R.id.nfc_button);
integrator = new IntentIntegrator(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
//
anim = ObjectAnimator.ofFloat(this.nfcButton, "scaleX", new float[]{0.9f});
anim2 = ObjectAnimator.ofFloat(this.nfcButton, "scaleY", new float[]{0.9f});
List<Fragment> fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);
}
private List<Fragment> getFragments() {
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(ScanFragment.newInstance("Fragment 1"));
fList.add(WebFragment.newInstance("Fragment 2"));
return fList;
}
我的页面适配器
class MyPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
我的 Fragment 的重要部分:
public interface OnButtonClickedListener {
public void onButtonClicked(View view);
}
public static final ScanFragment newInstance(String message)
{
ScanFragment f = new ScanFragment();
Bundle bdl = new Bundle(1);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_scan, container, false);
mainActivity = (MainActivity) getActivity();
MainActivity.display = 0;
qrButton = (ImageButton) view.findViewById(R.id.main_button);
nfcButton = (ImageButton) view.findViewById(R.id.nfc_button);
anim = ObjectAnimator.ofFloat(this.nfcButton, "scaleX", new float[]{0.9f});
anim2 = ObjectAnimator.ofFloat(this.nfcButton, "scaleY", new float[]{0.9f});
nfcButton.setOnClickListener(this);
qrButton.setOnClickListener(this);
return view;
}
而我的片段的 XML 只包含几个按钮和图像
【问题讨论】:
-
请发布您的 xml 和片段/活动代码
-
是的,我已经编辑了我的帖子 :)
-
你可以直接使用view_pager当前项目而不是通过id查找
-
怎么样?例如,从我的 MainActivity 中,我想访问我在 Fragment 中使用的文本(例如),如下所示:
scan_fragment = (ScanFragment) getSupportFragmentManager().findFragmentById(R.id.scan_fragment);然后:scan.fragment.my_text = 'foo'; -
我试过这个
List<Fragment> frags = getFragments(); scan_fragment = (ScanFragment) frags.get(0);但还是不行
标签: java android android-fragments android-viewpager