gpt4 book ai didi

Android 在 FragmentPagerAdapter 中的 Fragment 中设置 TextView 的文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:47 26 4
gpt4 key购买 nike

这个让我抓狂。基本上,我想创建一个 ViewPager 并向其添加一些 Fragment。然后,我只想在 Fragment 的一个 TextView 中设置一个值。我可以很好地添加 Fragment,它们会附加,但是当我转到 findViewById() 中的第一个 TextViewFragment 它抛出一个 NullPointerException。我,对于我的生活,无法弄清楚为什么。

到目前为止,这是我的代码,如果需要更多请告诉我。

public class SheetActivity extends FragmentActivity {

// /////////////////////////////////////////////////////////////////////////
// Variable Declaration
// /////////////////////////////////////////////////////////////////////////
private ViewPager viewPager;
private PagerTitleStrip titleStrip;
private String type;
private FragmentPagerAdapter fragmentPager; //UPDATE

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

viewPager = (ViewPager) findViewById(R.id.viewPager);
titleStrip = (PagerTitleStrip) findViewById(R.id.viewPagerTitleStrip);

// Determine which type of sheet to create
Intent intent = getIntent();
this.type = intent.getStringExtra("type");
FragmentManager manager = getSupportFragmentManager();
switch (type) {
case "1":
viewPager.setAdapter(new InstallAdapter(manager));
break;
case "2":
viewPager.setAdapter(new InstallAdapter(manager));
break;
}
fragmentPager = (FragmentPagerAdapter) viewPager.getAdapter(); //UPDATE
}

@Override
public void onResume() {
super.onResume();

fragmentPager.getItem(0).setText("something"); //UPDATE
}

class MyAdapter extends FragmentPagerAdapter {

private final String[] TITLES = { "Title1", "Title2" };
private final int PAGE_COUNT = TITLES.length;
private ArrayList<Fragment> FRAGMENTS = null;

public MyAdapter(FragmentManager fm) {
super(fm);
FRAGMENTS = new ArrayList<Fragment>();
FRAGMENTS.add(new FragmentA());
FRAGMENTS.add(new FragmentB());
}

@Override
public Fragment getItem(int pos) {
return FRAGMENTS.get(pos);
}

@Override
public int getCount() {
return PAGE_COUNT;
}

@Override
public CharSequence getPageTitle(int pos) {
return TITLES[pos];
}
}
}

我创建的所有 Fragment 仅覆盖了 onCreateView() 方法,因此我可以显示正确的 XML 布局。除此之外,它们是“股票”。为什么我不能与任何 Fragment 中的元素交互?

更新:

那么做这样的事情吗?

public class FragmentA extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle inState) {
return inflater.inflate(R.layout.fragment_a, container, false);
}

public void setText(String text) {
TextView t = (TextView) getView().findViewById(R.id.someTextView); //UPDATE
t.setText(text);
}
}

fragment A 的 XML 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/someTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="22sp" />

</LinearLayout>

最佳答案

TextView 位于 fragment 布局中,而不是在 ViewPagersPagerAdapter 中,这是导致 NPE 的原因。现在,您有 2 个选择。

  • 第一个是最简单的,您应该简单地将更改文本的代码移动到相应 fragment 的类中,在本例中为 FragmentA。
  • 其次,您可以将 TextView 设为静态的 FragmentA,以便其他类可以访问它。所以你的代码看起来像这样:

     ....
    TextView myText;

    @Override
    public View onCreateView(....) {

    myLayout = ....;

    myText = myLayout.findViewById(yourID);

    ....
    }

然后您将从其他地方更改文本(如果确实有必要):

   FragmentA.myText.setText("new text");

解释方法二

在您的 fragment 中使用以下内容。

public static void setText(String text) {
TextView t = (TextView) getView().findViewById(R.id.someTextView);
t.setText(text);
}

然后将文本更改为:

FragmentA.setText("Lulz");

关于Android 在 FragmentPagerAdapter 中的 Fragment 中设置 TextView 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559124/

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