如何从自定义视图更改TextView的文本?

时间:2011-07-16 11:21:47

标签: android textview

我实际上是在尝试构建我的第一个Android应用程序,而我刚刚遇到了一个我无法弄清楚的问题。

我在XML中有两个视图,一个是简单的基本TextView:

<TextView  
android:id="@+id/tv"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"
/>

另一个是我构建的自定义类:

<com.package.testpanel.Panel 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

这个“小组”的代码非常简单:

public class Panel extends View implements OnTouchListener, OnGestureListener {

TextView tv;

public Panel(Context context, AttributeSet attrs) {
    super(context, attrs);
    tv = (TextView) findViewById(R.id.tv);
    if (tv != null) {
        tv.setText("Text changed");
    }
}
}

(我当然实现了所有的Listeners方法)

正如您在我的构造函数中看到的那样,我只是想从Panel中更改TextView的文本,它将无法正常工作。如果我没有把“if(tv!= null)”条件,应用程序只是 发射时崩溃。 我尝试将这段代码放在一个侦听器的方法而不是构造函数中,结果相同:没有任何事情发生,或者在没有if条件的情况下崩溃。 如果我在Activity的onCreate中输入完全相同的代码,它可以很好地工作,但我的目标是根据面板上的触摸和手势监听器更改TextView的文本/属性。

我对这个Android SDK真的很新,我还没有尝试如何调试应用程序,但是现在我只想知道为什么这个简单的代码无效。

因此,如果有人知道为什么我不能这样做,或者解决方法,我会非常感激!

2 个答案:

答案 0 :(得分:1)

是。我们应该在尝试获取子视图之前首先加载主布局。这通常有以下声明:

setContentView(R.layout.your_layout);

请参阅http://developer.android.com/reference/android/app/Activity.html

另外,我建议您在尝试创建复杂的应用程序之前先花一些时间在基本概念上。这将为您节省大量时间来指出这些问题。

答案 1 :(得分:0)

setContentView(R.layout.your_filename_with_textview);

之前添加tv = (TextView) findViewById(R.id.tv);