ViewPager中Fragment和Activity直間的傳值
阿新 • • 發佈:2019-02-11
程式碼拿走,程式碼拿走,首先因為我的需求頁面都差不多,類似於頭條的那種,所以直接公用了一個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型別的陣列,裡面兩個資料,傳值的話就直接在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; } }); } }