片段中的文本视图不改变颜色

时间:2015-05-07 19:20:17

标签: java android xml android-fragments

我试图在我的活动片段中更改文本视图的文本颜色,但由于此错误没有任何更改:

Cannot find symbol method findViewById(int)

我该怎么做才能解决这个问题?

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/black">

    <TextView
        android:id="@+id/WCBank_textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.Medium"/>

</RelativeLayout>

爪哇

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class TabWCBankTerminus extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v =inflater.inflate(R.layout.tab_wc_bank_terminus,container,false);
        return v;

        TextView txt = (TextView)findViewById(R.id.WCBank_textView1);
        txt.setText(Html.fromHtml("<font color='#FFD300'>text0</font>" +
                        "<font color='#00A4A7'> text1</font>" +
                        "<font color='#E32017'> text2</font>" +
                        "<font color='#FFFFFF'> text3</font>"
        ));
    }
}

2 个答案:

答案 0 :(得分:2)

Fragment未定义findViewById()方法,您需要使用View对象(v)来调用它。 这背后的原因是,Fragment在布局膨胀之前对布局一无所知。您正在给布局充气并返回一个视图对象,其中包含有关您尝试配置的内容的信息,因此您需要在View对象而不是Fragment上调用该方法。

更改为:

TextView txt = (TextView)v.findViewById(R.id.WCBank_textView1);

然后在方法的最后,return v,而不是在进行配置更改之前。

完成后看起来应该是这样的:

public class TabWCBankTerminus extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v =inflater.inflate(R.layout.tab_wc_bank_terminus,container,false);

        TextView txt = (TextView)v.findViewById(R.id.WCBank_textView1);
        txt.setText(Html.fromHtml("<font color='#FFD300'>text0</font>" +
                        "<font color='#00A4A7'> text1</font>" +
                        "<font color='#E32017'> text2</font>" +
                        "<font color='#FFFFFF'> text3</font>"
        ));
        return v;
    }
}

答案 1 :(得分:1)

在你的onCreateView中,你有两个错误。首先,在您的情况下,返回语句必须是最后一个,否则后面的语句是无法访问的。其次,您必须通过findViewById调用v。与Activity不同,Fragment没有findViewById方法

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v =inflater.inflate(R.layout.tab_wc_bank_terminus,container,false);       
    TextView txt = (TextView)v.findViewById(R.id.WCBank_textView1);
    txt.setText(Html.fromHtml("<font color='#FFD300'>text0</font>" +
                    "<font color='#00A4A7'> text1</font>" +
                    "<font color='#E32017'> text2</font>" +
                    "<font color='#FFFFFF'> text3</font>"
    ));
    return v;
}