从其主活动访问当前可见的Fragments小部件

时间:2016-01-14 15:35:26

标签: android android-fragments

根据Android studio中的示例活动(选项卡式视图)构建。 该活动通过让微调器显示选择列表来工作,当选择一个时,它会生成一个新片段 - 将一个节号传递给它,然后片段在其文本小部件中显示该片段。 我看到的大多数答案都集中在Fragment中控制小部件,但我的代码将接收数据并更新Fragments创建活动中的活动片段显示。

我试图解释这个问题,(目前正在进行调试)但是还在苦苦挣扎。

我需要更改新文本小部件上的文字,我已将其放置在Fragment的容器中,&text;文本视图10'无论当前片段显示的是什么,都要这样做。

除此之外,更改文本所需的代码在处理程序中从另一个线程接收消息。

好消息是处理程序正在接收字符串消息 - 但我无法弄清楚如何在当前显示的片段中获取对调试文本小部件的引用。

以下所有内容均未成功,但在我需要显示文字的位置显示了我正在尝试的内容。

                      PlaceholderFragment fragmentDemo = (PlaceholderFragment)
                        getSupportFragmentManager().findFragmentByTag("SOMETAG"); // The problem is the Tag is different for each fragment.


                PlaceholderFragment instanceFragment= (PlaceholderFragment)getSupportFragmentManager().findFragmentById(R.id.container);
                View v = instanceFragment.getView();

                debugtext = v.findViewById(R.id.textView10);  // ERROR

生成片段的代码位于微调器的OnItemSelectedListner中,它引入了对所选项目位置的引用...

      class mySpinnerListener implements Spinner.OnItemSelectedListener
{
    @Override
    public void onItemSelected(AdapterView parent, View v, int position,
                               long id) {

        // When the given dropdown item is selected, show its contents in the
        // container view.
                 getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit(); }

1 个答案:

答案 0 :(得分:0)

 getSupportFragmentManager().beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1),"tag"+position)
.commit();

PlaceholderFragment fragmentDemo = (PlaceholderFragment)getSupportFragmentManager().findFragmentByTag("tag"+position);

PlaceholderFragment extends Fragment{
   private ViewGroup rootView;
   onCreateView(){
      rooView = inflate();
      return rootView;
   }
   public ViewGroup getMyRootView(){
      return rootView;
   }
}
View myFragmentView = fragmentDemo.getMyRootView();