2013-08-28 87 views
2

我試圖在viewpager中的兩個片段之間傳遞字符串,但我沒有找到正確的方法來做到這一點。 這是到目前爲止我的代碼:如何在viewpager中的片段之間傳遞字符串

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ 

    final int PAGE_COUNT = 6; 

    /** Constructor of the class */ 
    public MyFragmentPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /** This method will be invoked when a page is requested to create */ 
    @Override 
    public Fragment getItem(int arg0) { 


     switch (arg0) { 
     case 0: 
      return new MyFragment(); 
     case 1: 
      return new part2(); 
     case 2: 
      return new Part3(); 
     case 3: 
      return new Part4(); 
     case 4: 
      return new Part5(); 
     case 5: 
      return new Part6(); 
     default: 
      return null; 
     } 
    } 

    /** Returns the number of pages */ 
    @Override 
    public int getCount() {  
     return PAGE_COUNT; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) {   
     return "Page #" + (position + 1); 
    } 





} 

public class MainActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /** Getting a reference to the ViewPager defined the layout file */   
     ViewPager pager = (ViewPager) findViewById(R.id.pager); 

     /** Getting fragment manager */ 
     FragmentManager fm = getSupportFragmentManager(); 

     /** Instantiating FragmentPagerAdapter */ 
     MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); 

     /** Setting the pagerAdapter to the pager object */ 
     pager.setAdapter(pagerAdapter); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

我不使用標籤與viewpager。我應該在碎片中寫什麼?

UPDATE: 我試圖實現一個接口等提出的答案:

public interface OnTogglePressListener { 
    public void onTogglePressed(String msg); 
} 

在第一片段:

@Override 
public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     try { 
      buttonListener = (OnTogglePressListener) getActivity(); 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement onTogglePressed"); 
     } 
     super.onAttach(activity); 
    } 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     buttonListener.onTogglePressed("Off"); 
... } 

在第二片段:

public String getEtat(String etat) 
    { state =etat; 
     return etat; 

    } 

在ma in activity:

public void onTogglePressed(String etat) 
    { 
     Part5 p = (Part5)getSupportFragmentManager().findFragmentById(R.layout.frag_2); 
     p.getEtat(etat); 

    } 

但是我每次都得到一個NullPointerException。

+0

你初始化了你的接口嗎?嘗試從你的接口創建一個對象,然後在onActivityCreated()回調函數上實例化你的接口對象,如:InterfaceInstance =(onTogglePressListener)getActivity(); –

+0

之後? – user2137817

回答

-4

所以我找到了解決方案,實現是正確的,唯一的事情就是我應該在第二個片段的方法中執行處理,就是這樣!

+0

它的工作原理,但它不是最好的方法,這個解決方案將無法在ViewPager上工作! –

+0

是的,它適用於我ViewPager – user2137817

+2

糟糕的答案,考慮修改和更改選定的答案 – surfer190

3

你很明顯使用ViewPager,你可以利用它。您可以將代碼添加到ViewPager這樣的:

活動:

pager.setTag("some text"); // pager is a ViewPager object 

然後你就可以得到這樣的片段通過ViewGroup中這樣的數據:

片段:

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

    String result = container.getTag().toString(); 
    // do something with the result 

    return view; 

您還可以將setTag()設置爲片段中的容器。

這是我發現的在碎片及其母親活動中發送數據的最乾淨的解決方案。另一個解決方案(到目前爲止沒有提到)是通過SharedPreferences發送數據,但如果可能的話,我會建議使用標籤。

+1

因此,這適用於「字符串」對象呢? – surfer190

相關問題