2014-03-01 21 views
0

里面我需要从一个片段两个字符串传递到另一个片段,终于到最后一个片段。基本上有一个FrameLayout的活动,其中各种片段被替换。传递参数在应用的过程中tabhost

的问题是,我认为我做了太多的步骤,它需要太多的时间用这种方式。 有更快的方法吗?我感到困惑。

这里是我的代码:

Frag1.java

//...Initiate frag2... 

//Pass strings as arguments 
Bundle args = new Bundle(); 
args.putString("String A", edittext1.getText().toString()); 
args.putString("String B", edittext2.getText().toString()); 
frag2.setArguments(args); 

//Replace this fragment with the frag2 that has tabhost in it 
manager.beginTransaction() 
.replace(R.id.container, frag2).addToBackStack(null).commit(); 

Frag2.java

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    Resources resources = getActivity().getResources(); 

    mRoot = inflater.inflate(R.layout.frag2, container, false); 

    //Get tabhost and set it up 
    mTabHost = (TabHost) mRoot.findViewById(R.id.tabhost); 
    mTabHost.setup(); 

    FragmentManager manager = getFragmentManager(); 

    //Get the arguments again, and pass it to the fragment that will go inside tab1 
    Bundle args = new Bundle(); 
    args.putString("String A", getArguments().getString("String A")); 
    args.putString("String B", getArguments().getString("String B")); 

    //...Initiate frag3... 

    frag3.setArguments(args); 

    //Add it to the tab 
    manager.beginTransaction().add(R.id.tab1, frag3).commit(); 


    //Set content of tabs 
    TabSpec spec1 = mTabHost.newTabSpec("tab1"); 
    spec1.setIndicator("tab1"); 
    spec1.setContent(R.id.tab1); 

    TabSpec spec2 = mTabHost.newTabSpec("tab2"); 
    spec2.setIndicator("tab2"); 
    spec2.setContent(R.id.tab2); 

    mTabHost.addTab(spec1); 
    mTabHost.addTab(spec2); 

    return mRoot; 
} 

Frag2布局与tabhost,它可能是有用的

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#EFEFEF" > 

<TabWidget 
    android:id="@android:id/tabs" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

<FrameLayout 
    android:id="@android:id/tabcontent" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <FrameLayout 
     android:id="@+id/tab1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="60dp" > 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/tab2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="60dp" > 
    </FrameLayout> 

</FrameLayout> 

</TabHost> 

Frag3 .java

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.frag3, container, false); 

    //Recover again the strings.. 
    stringA = getArguments().getString("String A"); 
    stringB = getArguments().getString("String B"); 

//Recover TextViews in tab1 
TextView tv1 = (TextView) rootView.findViewById(R.id.tv1); 
TextView tv2 = (TextView) rootView.findViewById(R.id.tv2); 

//...Do something with strings... 

//Set text of them with strings 
tv1.setText(String.valueOf(stringA)); 
tv2.setText(String.valueOf(stringB)); 

    return rootView; 
} 
+0

Urgh接头主机,你的问题开始出现。听起来像你说的UI设计有缺陷。我会添加一个简单的图像,解释您正在尝试显示不同步骤的内容。 –

回答

0

我认为做你所需要的最简单最简单的方法是使用SharedPreferences。您可以根据数据类型存储您需要的任何内容,并可以在应用程序中的任何位置进行恢复。

  • 基准是here

  • 而且here是一个很好的例子。

+0

谢谢,我在想这太,现在你已经得到证实,我来试试:) – user3151134

+0

无论是对声誉和反馈的目的,不要忘了(一旦你已经尝试过其他用户可能都一起发布的所有解决方案)接受最能帮助您的解决方案。 – nKn