0

我对 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 语句,用于返回的字符串何时为空,但这是我遇到问题的部分。如果你们需要我的代码的任何其他部分,请告诉我。我很乐意提供帮助。再次感谢您的输入。

编辑:根据要求,这是我的 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>
4

1 回答 1

1

已修复:我已经解决了问题。从 myEquation 中删除 toString 方法以查看使用的地址后,我意识到我正在 onResume() 中初始化 myEquation。(此时我实际上已将其移至 onStart() ,但效果相同)

是的。在 onCreate() 中初始化所有变量并避免大量头痛。

于 2012-04-25T14:34:13.307 回答