Я следовал этому руководству для реализации ViewPager (без создания табуляции): https://www.javacodegeeks.com/2013/04/android-tutorial-using-the-viewpager.html
Это работает, но у меня проблема:
Когда я пытаюсь чтобы сделать findFragmentById(R.id.my_fragment)
, он возвращает мне ноль. И я думаю, это потому, что в моем activity_main.xml
нет ничего, кроме ViewPager
Я попытался добавить <fragment>
в мой activity_main.xml
, теперь я могу получить доступ к своему фрагменту, используя findFragmentById(R.id.my_fragment)
но мой ViewPager сейчас не работает
Есть ли способ получить доступ к моему фрагменту? Мне нужно получить доступ к его представлениям.
Вот мой код деятельности. 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;
}
MyPageAdapter
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();
}
}
Важная часть моего фрагмента:
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 просто содержит несколько кнопок и изображений