我的TextView在自定义视图中出现问题

时间:2014-01-03 15:17:21

标签: java android layout textview

现在,在任何人说出任何事情之前我都知道这件事以前曾被问过,我在这里看了很多问题而且找不到任何有帮助的东西

在我的自定义视图中,我试图在我的布局文件中找到一个文本视图,它继续返回null。

继承我的代码:

Main.java

public class Main extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView( R.layout.game );
    }
.....

CustomView.java

public class CustomView extends SurfaceView
{
    TextView MyTextView; // <-- THIS SHOULD BE SET    

    public CustomView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

Game.XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gamelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/background">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_gravity="center"
        android:orientation="horizontal"
        android:layout_weight="0.025">

        <TextView
            android:id="@+id/MyTextView" // This needs to be found
            android:layout_width="0dip"
            android:layout_weight="1"
            android:textSize="16sp"
            android:text="@string/health"
            android:layout_height="fill_parent"
            android:contentDescription="@string/health"/>

    </LinearLayout>

    <package.CustomView
                ....... />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

假设您已将布局文件中id的{​​{1}}设置为TextView,您需要做的就是这样分配:

TextView1

但您需要addView()或在自定义视图中对布局进行充气。

答案 1 :(得分:0)

仅对视图组内的视图进行引用不会将其添加到视图层次结构中。您需要调用addView(或其关联的方法之一) - 视图将包含在子视图列表中,然后将成为onMeasure,onLayout进程等的一部分。

findViewById以递归方式遍历视图层次结构以查找id,因此视图需要位于要查找的子视图组列表中