Android 使用父FragmentActivity中的数据创建片段选项卡

Android 使用父FragmentActivity中的数据创建片段选项卡,android,android-fragments,Android,Android Fragments,我有以下片段活动: public class DiagramsActivity extends FragmentActivity implements TabListener, OnPageChangeListener { private ViewPager viewPager = null; private FragmentPagerAdapter fragmentPager = null; @Override public void onCreate(Bun

我有以下
片段活动

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 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();
        }
    }
}
public类LineFragment扩展了Fragment{
私有GraphicalView GraphicalView=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\状态\始终\隐藏);
}
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
返回充气机。充气(右布局图、活动图、线、碎片、容器、假);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
}
@凌驾
恢复时公开作废(){
super.onResume();
if(this.graphicalView==null){
列表xValues=Arrays.asList(1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0);
List 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=newlinegraph().getLineGraph(this.getActivity().getApplicationContext(),xValues,yValues);
LinearLayout布局=(LinearLayout)this.getActivity().findViewById(R.id.diagrams\u line\u布局);
layout.addView(this.graphicalView,新的LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,500));
}否则{
这个.graphicalView.repaint();
}
}
}
我在这里创建的用于绘制图表的数据是在
onResume()中手动设置的,用于测试。
我现在要做的是创建/加载我想在我的
FragmentActivity
中表示的数据,我希望我的所有选项卡都使用
FragmentActivity
中的数据,并且在调用
onResume
时从中更新数据。为此,我需要在每个选项卡中设置一个按钮,用于启动选择数据的对话框


如何在每个选项卡中创建一个对话框,将数据返回到“碎片活动”
,然后从新数据更新所有选项卡?

有两个直接选项:

  • 在片段的
    onResume()
    中使用
    getActivity()
    ,以获取“父”活动的属性或“意图”

  • 使用
    捆绑
    按片段实例化数据:

  • 公共类图FragmentPagerAdapter扩展了FragmentPagerAdapter{

      @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 );
        }
      }
    }
    

    我不知道这是否符合我的目的,因为我需要以某种方式将数据从活动获取到FragmentPagerAdapter。
      @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 );
        }
      }
    }