从活动中获取片段中的视图

时间:2018-02-24 10:07:39

标签: android android-fragments android-activity

我正在学习Android。 从我的活动中,我创建了一个片段

 FragmentTransaction transaction = 
 getSupportFragmentManager().beginTransaction();
 MessageFragment fragment = new MessageFragment();
 transaction.replace(R.id.sample_content_fragment, fragment);
 transaction.commit();

片段有两个标签

public Object instantiateItem(ViewGroup container, int position) {
  // Inflate a new layout from our resources
  View view;
  if (position ==0) {
         view = getActivity().getLayoutInflater().inflate(R.layout.message_item,
                        container, false);
                // Add the newly created View to the ViewPager
                container.addView(view);
   }
   else {
       view = getActivity().getLayoutInflater().inflate(R.layout.setting_item,
                        container, false);
          // Add the newly created View to the ViewPager
          container.addView(view);
      }

 // Return the View
  return view;
}

对于这两种布局,都有一个具有相同id的textview(比如MessageTitle),在我的MainActivity中,我有一个LocalBroadcastManager来传递一些消息。当消息类型为警告时,我想更新message_item布局中的textview,并在设置消息类型时,然后在setting_item中更新textview。

所以我可以获取显示的视图,以便我可以相应地更新textview吗?或者为单个文本视图提供唯一ID更好?

非常感谢

1 个答案:

答案 0 :(得分:0)

建议的方法是使用ViewPager。但是你现有的代码本身有很多不那么正常的方法,所以我会继续尝试帮助你解决你的问题

您无需获取活动的根片段View。你真正需要的是活跃的TextView

您可以使用类变量mMessageTextView并使用instantiateItem()mMessageTextView = view.findViewById(<the id of the texti view>)方法中对其进行初始化。此外,您可以使用布尔变量isSettginsPage并根据现在的活动设置True/False

当您收到来自LocalBroadcastManager的消息时,只需使用isSettingsPage即可了解当前有效的网页,然后根据需要将mMessageTextView更新为mMessageTextView.setText(<message>)。< / p>