在我的活动中,我创建了一些片段
public class MainActivity extends AppCompatActivity implements IabBroadcastListener{
static ViewPagerAdapter adapter;
....
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new MainFragment(), "\uE602");
adapter.addFragment(new QuestionsListFragment(), "\uE620");
adapter.addFragment(new MyQuestionsFragment(), "\uE61E");
adapter.addFragment(new NotificationsFragment(), "\uE601");
adapter.addFragment(new ProfileSettingFragment(), "\uE605");
viewPager.setAdapter(adapter);
如何从我的活动中修改片段的textview?我试图从父活动
获取MainFragment的视图 TextView textview_buy_SLPro = (TextView) howtogetMainFragment.findViewById(R.id.txt_Buy_Pro);
答案 0 :(得分:0)
尝试使用onActivityCreated()
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView textview_buy_SLPro = (TextView) getView().findViewById(R.id.txt_Buy_Pro);
textview_buy_SLPro.setText(getActivity.getSomeText());
}
答案 1 :(得分:0)
我认为更好的解决方案是片段
中的create方法 public void setBuySLPro(String data) {
textview_buy_SLPro.setText(data);
}
从活动中调用此方法。从活动中访问片段视图并不是最好的主意。
字段应根据CamelCase规则命名。
答案 2 :(得分:0)
您可以在片段内创建一个方法,以更改视图甚至返回它。
public class MyFragment extends Fragment {
TextView mTextView;
....
public void setTextView(String text){
mTextView.setText(text);
}
....
}
从您的活动中调用它:
public class MainActivity extends AppCompatActivity implements IabBroadcastListener{
static ViewPagerAdapter adapter;
....
MainFragment mMainFragment = new MainFragment();
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(mMainFragment, "\uE602");
adapter.addFragment(new QuestionsListFragment(), "\uE620");
adapter.addFragment(new MyQuestionsFragment(), "\uE61E");
adapter.addFragment(new NotificationsFragment(), "\uE601");
adapter.addFragment(new ProfileSettingFragment(), "\uE605");
viewPager.setAdapter(adapter);
....
//call method inside fragment
mMainFragment.setTextView("Hello World!");
...
}
答案 3 :(得分:0)
您正在谈论属于ViewPager
的片段,因此您有两个问题:
您的片段可能没有活动视图(例如,如果您已从其中滑过几页)。因此片段的TextView
可能甚至不存在。
片段本身可能甚至不存在(例如,如果您没有刷过足够的页面来创建片段,或者您正在子类化FragmentStatePagerAdapter
)。
我发现在这种情况下,最好的设计是一个事件监听器模式,其中片段在创建视图时设置活动的监听器。此外,文本值应存储在活动中,以便当有人用该片段滑动到页面时,片段可以在TextView
上设置正确的值。
模式如下:
为活动创建interface
;恩。 TextUpdateListener
为您的活动添加听众列表
当片段创建其视图时,它会向活动添加一个侦听器,当它破坏视图时,它会取消注册侦听器。侦听器在从活动接收到事件时将更新其视图。
当值更改时,活动将通过侦听器列表并调用其事件方法。
我在this SO answer中提供了一个非常详细的代码示例。
答案 4 :(得分:0)
有很多方法可以做到这一点。我最喜欢的是使用消息总线(如Otto,tinybys等)并使用事件在应用程序组件之间进行通信。这是一种设计模式,需要一些学习才能实现,但非常值得付出努力。