gpt4 book ai didi

android - 如何从 Activity (viewpager)更新 fragment 内容?

转载 作者:IT老高 更新时间:2023-10-28 23:13:17 25 4
gpt4 key购买 nike

我有一个带有两个 fragment 的简单 viewPager。每个 fragment 都包含一个 TextView。我希望能够更新 Activity 中显示的当前 textView 的文本。

Activity :

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);

ArrayList<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(Fragment.instantiate(this, Live.class.getName()));
fragments.add(Fragment.instantiate(this, Hit.class.getName()));

this.pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(),fragments);

ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pagerAdapter);
}
}

适配器:

public class MyPagerAdapter extends FragmentPagerAdapter {

private final ArrayList<Fragment> fragments;

public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments)
{
super(fm);
this.fragments = fragments;
}

@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}

@Override
public int getCount() {
return this.fragments.size();
}
}

fragment :

public class Live extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.live, container,false);
}
}

XML fragment :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:text="First Fragment"
android:id="@+id/status"/>
</LinearLayout>

每个 fragment 都有一个 ID 为“status”的 TextView。在 onCreateView 中更新 TextView 有效。但是我怎样才能从 Activity 中的任何地方更新 textView 呢?

我试过这个没有成功:

fragment :

public class Live extends Fragment {    
public TextView tv;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.live, container,false);
tv = (TextView) view.findViewById(R.id.status);

return view;
}
}

Activity :

@Override
protected void onResume() {
super.onResume();
Live frag = (Live) pagerAdapter.getItem(0);
frag.tv.setText("Test 2");
}

但它在 tv 上给了我一个 nullPointerException,可能是因为 fragment 尚未膨胀。

我已经阅读了以下问题但没有成功:

最佳答案

在您的 MyPagerAdapter 类中,Android 仅在想要创建新 Fragments 时才调用 getItem(...)。所以在那里使用引用是有问题的,而不是你应该实例化 fragment 。

查看此答案 support-fragmentpageradapter-holds-reference-to-old-fragments

关于android - 如何从 Activity (viewpager)更新 fragment 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com