2014-11-25 74 views
0

我有以下FragmentActivity使用從父FragmentActivity數據製作片段標籤

public class DiagramsActivity extends FragmentActivity implements TabListener, OnPageChangeListener { 
    private ViewPager viewPager = null; 
    private FragmentPagerAdapter fragmentPager = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.fragmentPager = new DiagramsFragmentPagerAdapter(this.getSupportFragmentManager()); 

     this.setContentView(R.layout.activity_diagrams); 

     this.viewPager = (ViewPager) this.findViewById(R.id.diagrams_pager); 
     this.viewPager.setOnPageChangeListener(this); 
     this.viewPager.setAdapter(this.fragmentPager); 
     this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_line)).setTabListener(this)); 
     this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_bar)).setTabListener(this)); 
     this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_scatter)).setTabListener(this)); 
     this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_pie)).setTabListener(this)); 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) { 
     this.viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) {} 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {} 

    @Override 
    public void onPageScrollStateChanged(int state) {} 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

    @Override 
    public void onPageSelected(int position) { 
     this.actionBar.setSelectedNavigationItem(position); 
    } 
} 

有了這個佈局:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/diagrams_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000000" 
    android:padding="10dip" 
    tools:context="de.controller.activities.DiagramsActivity" > 

</android.support.v4.view.ViewPager> 

適配器:

public class DiagramsFragmentPagerAdapter extends FragmentPagerAdapter { 

    public DiagramsFragmentPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public Fragment getItem(int index) { 
     switch (index) { 
      case 0 : { 
       return new LineFragment(); 
      } 
      case 1 : { 
       return new BarFragment(); 
      } 
      case 2 : { 
       return new ScatterFragment(); 
      } 
      case 3 : { 
       return new PieFragment(); 
      } 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    } 
} 

我有幾個標籤,例如下面的例子:

public class LineFragment extends Fragment { 
    private GraphicalView graphicalView = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_diagrams_line_fragment, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (this.graphicalView == null) { 
      List<Double> xValues = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0); 
      List<Double> yValues = Arrays.asList(30.0, 34.0, 45.0, 57.0, 77.0, 89.0, 100.0, 111.0, 123.0, 145.0); 

      this.graphicalView = new LineGraph().getLineGraph(this.getActivity().getApplicationContext(), xValues, yValues); 

      LinearLayout layout = (LinearLayout) this.getActivity().findViewById(R.id.diagrams_line_layout); 

      layout.addView(this.graphicalView, new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500)); 
     } else { 
      this.graphicalView.repaint(); 
     } 
    } 
} 

我創建這裏繪製圖中的數據被設定手動onResume()用於測試的內部。 我想現在要做的是創建/加載我想在我FragmentActivity代表,我想我所有的標籤從FragmentActivity使用數據以及當onResume被稱爲從它來更新數據。爲此,我需要在每個選項卡中啓動用於選擇數據的對話框中的按鈕。

如何創建每個選項卡中來自新數據將數據返回到FragmentActivity,之後更新所有選項卡的對話框?

回答

0

有2個直接的選擇:

  1. 使用getActivity()在片段的onResume()通過獲取數據的屬性或‘父’活動的'意圖」

  2. 使用bundle片段實例化:

public class DiagramsFragmentPagerAdapter extends FragmentPagerAda pter {

@Override 
    public Fragment getItem(int index) { 
    Bundle b = new Bundle(); 
    b.putString("someString", this.someString); 
    b.putParcelable("someObject", this.someObject()); 
    switch (index) { 
     case 0 : { 
      return Fragment.instantiate(this, LineFragment.class.getName(), b); 
    } 
    } 
} 
+0

我不知道這是否適合我的目的,因爲我需要以某種方式從活動中獲取數據到FragmentPagerAdapter。好吧,我想我會嘗試使用我的活動的意圖。 – Mulgard 2014-11-25 10:27:50