gpt4 book ai didi

java - viewPager.setOnPageChangeListener() 中 fragment 返回 null

转载 作者:行者123 更新时间:2023-12-01 18:18:27 25 4
gpt4 key购买 nike

我有一个名为 GuivActivity 的主要 Activity ,它使用 viewPager 在两个 fragment (listFragment 和 SearchFragment)之间切换。但是当我尝试通过 onPageSelected 中的 id 获取 Fragment 时,它返回 null。

我在这里想做的就是重新启动ListFragment中的加载器,这样每次我回来时我都会有最新的数据。

在GuivActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_guiv);

viewPager = (ViewPager)findViewById(R.id.viewpager);
indicator = (TitlePageIndicator) findViewById(R.id.titleindicator);
pagerAdapter = new PagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
indicator.setViewPager(viewPager);
indicator.setOnPageChangeListener(listener);
}
ViewPager.OnPageChangeListener listener = new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}
@Override
public void onPageSelected(int position) {

switch (position){
case 0:
FragmentManager fm = getSupportFragmentManager();
ListFragment listFragment = (ListFragment) fm.findFragmentById(R.id.list_fragment_id);

case 1:

default:
break;
}
}

@Override
public void onPageScrollStateChanged(int state) {

}
};

在ListFragment.java中

@Override
public void onResume() {
Message.message(mContext,"on resumed called");
getLoaderManager().restartLoader(LIST_LOADER,null,this);
super.onResume();
}

在 GuivActivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<com.viewpagerindicator.TitlePageIndicator
android:id="@+id/titleindicator"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />

<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white"/>

在 fragment 适配器中

 @Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new ListFragment();
case 1:
return new SearchFragment();
default:
break;
}

return null;
}

最佳答案

解决方案1

ListFragment listFragment = (ListFragment) pagerAdapter.instantiateItem(viewPager, position)

解决方案 2 这是一个 hack

ListFragment listFragment = (ListFragment) getSupportFragmentManager().findFragmentByTag(
"android:switcher:" + R.id.viewpager + ":" + viewPager.getCurrentItem());

注意但我建议您使用 FragmentPagerAdapter。它会给你比 PageAdapter

更多的控制权

关于java - viewPager.setOnPageChangeListener() 中 fragment 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28309298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com