假设目标应用程序是由3个片段构建的,这些片段都在同一个活动中public class MainActivity extends android.support.v4.app.FragmentActivity implements ActionBar.TabListener
。起始片段为public class ButtonSectionFragment extends Fragment
,其中有Button
:
public class ButtonSectionFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.btn, container, false);
Button mybutton = (Button) rootView.findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
????????????????????
}
});
}
??
方法中有onClick
,我会谈到这一点。还有另一个像这样的片段:
public static class TextSectionFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tv, container, false);
TextView textv = (TextView) rootView.findViewById(R.id.texty);
}
两个片段都使用不同的布局,因此这就是rootView
正好在findViewById
前面使用的原因。
我希望实现的结果是:通过第一个片段的Button
点击,将TextView
从第二个片段设置为Hello
。我应该在???
部分放置什么才能使它全部工作?
答案 0 :(得分:2)
您需要使用interface作为活动的回调,然后在fragment中设置textview。
两个framgents永远不应该直接沟通。
http://developer.android.com/training/basics/fragments/communicating.html
Framgent1 - >活动 - > Fragment2。
您可以先将片段2中的值与活动进行通信,然后再将活动中的值从片段2发送到片段2。然后在fragment2中设置文本
答案 1 :(得分:1)
您只需使用getActivity().findViewById()
代替getView().findViewById()
final TextView tv = (TextView) getActivity().findViewById(R.id.texty);
if (tv != null)
tv.setText("Hello");
片段只是活动的公共布局树中的分支。可以通过Activity.findViewByXXX()
访问公共活动的所有片段视图。唯一的复杂因素是可以动态添加,删除,替换片段等。因此,您需要确保所需的片段已经膨胀到布局层次结构中。您可以在另一个片段的onViewCreated()
中初始化UI。这可以保证您已经加载了布局。
答案 2 :(得分:0)
Fragment frag1 = new ButtonSectionFragment ();
Fragment frag2 = new TextSectionFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(layout, frag1);
ft.add(layout, frag2);
ft.commit();
View frag1RootView = frag1.getView();
View frag2RootView = frag2.getView();
Button btn = (Button)frag1RootView.findViewById(id);
TextView tv = (TextView)frag2RootView.findViewById(id);
未经测试但......我认为会这样做......
编辑:您应该获得onActivityCreated();或者它会给你一个空的......
答案 3 :(得分:0)
继续Raghunandan的回答,你可以检查链接中的类似实现。
update TextView in fragment A when clicking button in fragment B
不要忘记将TextSectionFragment的textview引用到MainActivity中。