一无聊就逛各个群,看别人提出的问题,今天的故事前奏是这样的:
一个小孩问我Activity里有个ViewPager,ViewPager里是Fragment,Activity里有个可编辑文本,通过点击按钮,可以把文本的内容传到Fragment,并且每个Fragment都是不一样的,这个问题,网上一搜不是一堆么,然而,我没有用那些方法,哈哈
嗯,感觉主要就是两点吧
1.拿到当前Fragment
2.调用Fragment中的方法传值
假设你会弄个集合把Fragment都丢进去,也假设你已经把ViewPager都设置好了,现在我们开始找当前的Fragment,通过viewPager.getCurrentItem()这个方法可以拿到当前下标,下标都有了,你说你找不到当前Fragment?打死我都不信,接下来开始调用Fragment里的方法,调用方法你总会吧,拿到文本上的内容你总会吧,点击监听你总会加吧,所以问题是不是已经解决啦,嘿嘿
不过,代码还是放一下吧,我担心会有小孩那样的萌新
TestFragment.java
public class TestFragment extends Fragment {
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_base_lazy, container, false);
tv = view.findViewById(R.id.tv);
return view;
}
public void onMainAction( String str) {
tv.setText(str);
}
}
MainActivity.java
public class Main2Activity extends AppCompatActivity {
ViewPager viewPager;
List<TestFragment> mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
viewPager = findViewById(R.id.viewpager);
mFragment = new ArrayList<>();
mFragment.add(new TestFragment());
mFragment.add(new TestFragment());
mFragment.add(new TestFragment());
final EditText et = findViewById(R.id.et);
viewPager.setAdapter(vpAdapter());
findViewById(R.id.commit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TestFragment f = mFragment.get(viewPager.getCurrentItem());
f.onMainAction(et.getText().toString());
}
});
}
private FragmentPagerAdapter vpAdapter() {
return new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// super.destroyItem(container, position, object);
}
@Override
public Fragment getItem(int position) {
return mFragment.get(position);
}
@Override
public int getCount() {
return mFragment.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "";
}
};
}
}