Android:TextView无法更新invalidate()或postInvalidate()

时间:2012-04-24 05:25:45

标签: android android-intent

我对Android的编程很新,我在代码中更新TextView时遇到了问题。我可以设置它,并从onResume()正确更新。

稍后,我打电话给

startActivityForIntent(my.android.activity,0)

然后我在此方法中使用setText:

onActivityResult(int requestCode, int resultCode, Intent returnIntent){
    if (resultCode == Activity.RESULT_OK){
        String myString= returnIntent.getString("mystr","empty");
        myClass=myClass.interperetResults(myString);  //this method returns correctly
        leftText.setText(""+myClass.toString());
        leftText.invalidate() //neither invalidate() or postInvalidate() changes result
    }
};

它在TextView类中显示更新(我使用System.out来调试它),但它不会在屏幕上更新。

据我所知,我只需要调用TextView.invalidate()或TextView.postInvalidate(),这些都不是有效的。有什么我想念的,或者是什么?我已尝试过其他帖子中的许多不同建议,但在这里无济于事。

我还有一个rightText对象和if语句,当返回的字符串为null时,但这是我遇到问题的部分。如果你们需要我的代码的任何其他部分,请告诉我。我非常乐意提供帮助。再次感谢您的输入。

编辑:根据要求,这是我的xml布局。虽然问题不是我无法看到视图。当我在onResume()中调用setText时,它会正确显示和更改。无论如何,这是我的xml代码。我不想将变量名称更改为泛型事物,所以这就是它的实际情况。我正在与项目的合作伙伴合作,他是创建xml和布局的人,所以我不完全确定这里的一切是什么。我希望你们能理解它。

这是onCreate:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

}

并且onResume:

protected void onResume() {
    super.onResume();
    // The activity has become visible (it is now "resumed").
    setContentView(R.layout.play);

    myEquation = new Equation(getResources());
    leftText = (TextView) this.findViewById(R.id.playLeftEquation);
    rightText = (TextView) this.findViewById(R.id.playRightEquation);

    //leftText.setText("No data");
    //rightText.setText("No data");  //The textviews update fine here.  
               //Currently commented out because I thought that maybe this was 
               //overwriting the other setText, but still no change.

}



<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/atomic_bckgrd"
    android:columnCount="11" >
    <ImageButton    
        android:id="@+id/playTrashCanButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_columnSpan="2"
        android:layout_gravity="left"
        android:layout_row="0"
        android:contentDescription="@string/trash"
        android:onClick="clickHandler"
        android:src="@drawable/trash" />

    <Button
        android:id="@+id/playEditButton"
        android:layout_column="2"
        android:layout_row="0"
        android:onClick="clickHandler"
        android:text="@string/edit" />

    <ImageButton
        android:id="@+id/playRulesButton"
        android:layout_column="4"
        android:layout_columnSpan="5"
        android:layout_row="0"
        android:contentDescription="@string/rules"
        android:onClick="clickHandler"
        android:src="@drawable/rules1" />

    <TextView            //One of the non-updating fields
        android:id="@+id/playLeftEquation"
        android:layout_column="1"
        android:layout_gravity="bottom"
        android:layout_row="1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageButton
        android:id="@+id/playEnterButton"
        android:layout_column="2"
        android:layout_gravity="bottom"
        android:layout_row="1"
        android:contentDescription="@string/enter"
        android:onClick="clickHandler"
        android:src="@drawable/enter1" />

    <TextView               //The other non-updating field
        android:id="@+id/playRightEquation"
        android:layout_column="3"
        android:layout_columnSpan="6"
        android:layout_gravity="bottom"
        android:layout_row="1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Space
        android:layout_width="52dp"
        android:layout_height="1dp"
        android:layout_column="0"
        android:layout_row="0" />

    <Space
        android:layout_width="148dp"
        android:layout_height="1dp"
        android:layout_column="1"
        android:layout_row="0" />

    <Space
        android:layout_width="161dp"
        android:layout_height="1dp"
        android:layout_column="2"
        android:layout_row="0" />

    <Space
        android:layout_width="46dp"
        android:layout_height="1dp"
        android:layout_column="3"
        android:layout_row="0" />

    <Space
        android:layout_width="36dp"
        android:layout_height="1dp"
        android:layout_column="4"
        android:layout_gravity="fill_horizontal"
        android:layout_row="0" />

    <Space
        android:layout_width="1dp"
        android:layout_height="160dp"
        android:layout_column="0"
        android:layout_gravity="fill_horizontal"
        android:layout_row="0" />

</GridLayout>

1 个答案:

答案 0 :(得分:1)

<强>固定: 我已经找到了问题所在。从myEquation中删除toString方法以查看使用的地址后,我意识到我正在onResume()中初始化myEquation。 (到目前为止,我实际上已将它移动到onStart(),但这具有相同的效果)

所以是的。在onCreate()中初始化所有变量,避免大量的麻烦。