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()
,以获取“父”活动的属性或“意图”捆绑
按片段实例化数据: @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 );
}
}
}