ViewPagerにおけるFragmentとActivityの直間の伝達値

2134 ワード

コードは持っていって、コードは持っていって、まず私の需要のページがすべて悪くないため、トップのあのようなことに似ていて、だから直接1つのfragmentのレイアウトを公用して、もちろんあなたも複数を作成することができて、影響がなくて、主に実現した行FragmentとActivityの伝値処理
まずFragmentを作成します.ここでは共通の静的メソッドを定義しました.getInstance()は、activityで呼び出すには、Fragmentに直接コピーします.onCreateView()の最初の行は、コードの形式でTextviewコントロールを作成し、
        Bundle arguments = this.getArguments();         String url = arguments.getString("url");
渡された数値を表示し、getInstance()で返されるパラメータを取得します.

public class NewsFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        TextView textView = new TextView(getActivity());
        Bundle arguments = this.getArguments();
        String url = arguments.getString("url");
          textView.setText(url);

        return textView;
    }
    
    public static Fragment getInstance(String url){
        NewsFragment newsFragment = new NewsFragment();

        Bundle budle=new Bundle();
        budle.putString("url",url);
        newsFragment.setArguments(budle);
        return newsFragment;

    }
}

Activityの実装では、ここではstringタイプの配列を直接作成し、2つのデータを転送するとViewPagerのアダプタのgitItemメソッドで処理します.
  Fragment fragment = NewsFragment.getInstance(urls[position]);
詳しくはコードを見て

public class MainActivity extends FragmentActivity {
 String[] urls=new String[]{"www.baidu.com","www.toutiao.com"};
    private ViewPager vp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = findViewById(R.id.vp);
        vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                Fragment fragment = NewsFragment.getInstance(urls[position]);
                return fragment;
            }

            @Override
            public int getCount() {
                return urls.length;
            }
        });

    }
}