在更改/滑动片段上的ViewPager之间传递数据



im正在搜索一些时间,以找到一个解决方案,以在片段之间发送数据,而不是单击任何按钮,而仅在滑动和/或单击底部nav bar上,

因此,就我而言,我有一个视图器和同一活动中的三个片段。在第一个片段上,我有一个Seekbar,它向我展示了文本视图中的进展,而在第二片片段中也是如此。我想将每个TextView Integer传递到第三片片段上的两个文本视图。但这应该在我滑动到最后一个片段时做到这一点。希望您了解我想做的事和可以提供帮助。

我试图实现Onpause和Onstop,但它不起作用。我还有其他方法可以称呼吗?我知道,如果我将视图更改为其他片段,则应该有一个呼叫诸如Onswipe或OnchangeView之类的调用,以调用命令将数据发送到最后一个片段。

我的XML文件fragment_holding(对于pageone(有一个seekbar和一个正在显示进度的文本视图fragment_wind(对于pagetwo(有一个seekbar和一个正在显示进度的文本视图fragment_answer(对于Pagetree(有两个文本视图,可以在每个Seekbar

的进度

fragmentAdapter

public class FragmentAdapter extends FragmentPagerAdapter {
private List<android.support.v4.app.Fragment> Fragment = new ArrayList<>(); //Fragment List
private List<String> NamePage = new ArrayList<>(); // Fragment Name List
public FragmentAdapter(FragmentManager manager) {
    super(manager);
}
public void add(Fragment Frag, String Title) {
    Fragment.add(Frag);
    NamePage.add(Title);
}
@Override
public Fragment getItem(int position) {
    return Fragment.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
    return NamePage.get(position);
}
@Override
public int getCount() {
    return 3;
}

MainActivity

public class MainActivity extends AppCompatActivity{
ViewPager viewPager;
BottomNavigationView navigation;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navigation = findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    viewPager = findViewById(R.id.viewpager); //Init Viewpager
    setupFm(getSupportFragmentManager(), viewPager); //Setup Fragment
    viewPager.setCurrentItem(0); //Set Currrent Item When Activity Start
    viewPager.setOnPageChangeListener(new PageChange()); //Listeners For Viewpager When Page Changed

}
public static void setupFm(FragmentManager fragmentManager, ViewPager viewPager){
    FragmentAdapter Adapter = new FragmentAdapter(fragmentManager);
    //Add All Fragment To List
    Adapter.add(new PageOne(), "Page One");
    Adapter.add(new PageTwo(), "Page Two");
    Adapter.add(new PageTree(), "Page Three");
    viewPager.setAdapter(Adapter);
}
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                viewPager.setCurrentItem(0);
                return true;
            case R.id.navigation_dashboard:
                viewPager.setCurrentItem(1);
                return true;
            case R.id.navigation_notifications:
                viewPager.setCurrentItem(2);
                return true;
        }
        return false;
    }
};
public class PageChange implements ViewPager.OnPageChangeListener {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }
    @Override
    public void onPageSelected(int position) {
        switch (position) {
            case 0:
                navigation.setSelectedItemId(R.id.navigation_home);
                break;
            case 1:
                navigation.setSelectedItemId(R.id.navigation_dashboard);
                break;
            case 2:
                navigation.setSelectedItemId(R.id.navigation_notifications);
                break;
        }
    }
    @Override
    public void onPageScrollStateChanged(int state) {
    }
}

pageone 公共类Pageone扩展了片段{

private SeekBar sbar;
private TextView tView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.fragment_holding, null);
    sbar =(SeekBar) view.findViewById(R.id.seekBar5);
    tView = (TextView) view.findViewById(R.id.textView6);
    tView.setText(sbar.getProgress() + "/" + sbar.getMax());

    sbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        int pval = 0;
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            pval = progress;
            tView.setText(pval + "/" + seekBar.getMax());


        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            //write custom code to on start progress
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
    return view;
}

PAGETWO

public class PageTwo extends Fragment {
private SeekBar sbar4;
private TextView tView4;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.fragment_wind, null);

    sbar4 =(SeekBar) view.findViewById(R.id.seekBar5);
    tView4 = (TextView) view.findViewById(R.id.textView6);
    tView4.setText(sbar4.getProgress() + "/" + sbar4.getMax());

    sbar4.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        int pval = 0;
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            pval = progress;
            tView4.setText(pval + "/" + seekBar.getMax());
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            //write custom code to on start progress
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
    return view;
}

Pagetree

公共类Pagetree扩展了Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_answer, container, false);


    return view;
}

在您的适配器中执行此操作: -

@NonNull
    @Override
    public Fragment getItem(int position) {
        GridFragment gridFragment = new GridFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("position", position);
        bundle.putString("survayType", survayType);
        bundle.putInt("questionNo", questionNo);
        gridFragment.setArguments(bundle);
        return gridFragment;
    }

在您的片段中确实喜欢: -

        optionPosition = getArguments().getInt("position");
        survayType = getArguments().getString("survayType");
        questionNo = getArguments().getInt("questionNo");

最新更新