在Fragment中以编程方式添加TextView并设置为mainLayout

时间:2015-08-18 01:09:56

标签: android android-layout android-fragments nullpointerexception textview

在我的片段中,我没有返回我的对应的XML文件的视图,而是创建一个布局并按如下方式添加视图,然后返回该布局:

LinearLayout firstLinearLayout = new LinearLayout(getActivity());
LinearLayout secondLinearLayout = new LinearLayout(getActivity());

LinearLayout mainLayout = new LinearLayout(getActivity());
    mainLayout.setBackgroundColor(Color.TRANSPARENT);
    mainLayout.setOrientation(LinearLayout.VERTICAL);
    mainLayout.addView(firstLinearLayout);
    mainLayout.addView(secondLinearLayout);

return(mainLayout);

现在,我还尝试创建一个rootView来为我的xml充气,然后按如下方式访问该xml中的T​​extView:

View rootView = inflater.inflate(R.layout.xml_layout, container, false);

TextView check = (TextView) rootView.findViewById(R.id.textView);

然后将此TextView添加到我的mainLayout

mainLayout.setBackgroundColor(Color.TRANSPARENT);
mainLayout.setOrientation(LinearLayout.VERTICAL);
mainLayout.addView(firstLinearLayout);
mainLayout.addView(secondLinearLayout);
mainLayout.addView(check);

但是,在从我的XML分配TextViewcheck的行中,我得到一个NullPointerException。我无法弄清楚原因,任何人都可以帮助我吗?谢谢。

编辑 - 这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="@color/transparent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="here is random text"
    android:textColor="@color/white"
    android:gravity="center"
    android:textStyle="bold"
    android:textSize="30sp"
    android:id="@+id/mphTextView" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:3)

您应该使用

check = (TextView) rootView.findViewById(R.id.mphTextView);

如果您提供的布局是使用rootView

膨胀的布局

答案 1 :(得分:0)

  

现在,我还试图创建一个rootView来扩充我的xml,然后访问该xml中的T​​extView

不要这样做,你会崩溃很多。您的TextView已经有Parent,即rootView,您要将其添加到LinearLayout - mainLayout ??它没有崩溃?我认为这是一个伪装的错误信息,您的孩子已经有父母

你问的问题

  

但是,在从我的XML中分配TextView进行检查的行中,我得到一个NullPointerException。

但你在评论中说过

  

这当然是我尝试在TextView check =(TextView)rootView.findViewById(R.id.textView)之后立即更改文本大小的行;

那你实际上在哪里崩溃?

答案 2 :(得分:0)

mainLayout.addView(检查);将其替换为mainLayout.addView(rootView);

答案 3 :(得分:0)

我正在使用布局来为我的片段添加更多灵活性 - 我可以在屏幕周围添加和调整布局,而不必依赖静态xml文件。

所以在我的片段java类中,我添加了一个新的布局:

LinearLayout mainLayout = new LinearLayout(getActivity());

然后,我可以根据需要为此布局添加任意数量的视图。 E.G:

mainLayout.addView(firstLinearLayout); mainLayout.addView(secondLinearLayout);

只需return(mainLayout);,您的片段就会将此布局显示为视图。

您可以创建以编程方式添加到mainLayout的“子布局”并自定义它们。为了在我的片段中添加文本字段,我创建了一个包含LinearLayout的{​​{1}}的XML文件。为了将它添加到我的TextView,我在java类中调用它:

mainLayout

然后只需将其添加到LinearLayout addTextLayout = (LinearLayout) rootView.findViewById(R.id.random_text_layout);,就像使用其他布局一样:

mainLayout

通过设置mainLayout.addView(addTextLayout);,您可以将这些布局的定位和缩放调整到屏幕上的任何位置。我还怀疑你可以直接调用LayoutBarParams而不是XML中的布局,但这对我有用。我希望这可以帮助你!