将值分配给来自其他类的TextView

时间:2012-07-07 08:21:28

标签: android class android-layout android-context settext

TestaActivity.java

public class TestaActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvText=(TextView)findViewById(R.id.textView1);
        tvText.setText("Sample");
    }
}

Print.java

public class Print {
    public Print(Context tempContext) {
        //I want to assign the value to the tvText from here
    }
}

在上面的示例中,您可以看到我已将tvText中的文本设置为“Sample”。以同样的方式,我需要在创建后在Print类中为textView1 ID分配一些值。

请帮我弄清楚这样做的方法。

3 个答案:

答案 0 :(得分:2)

如果您的类Print在TestaActivity出现在屏幕上时被实例化,那么您可以获得tvText参考,以某种方式传递给TestaActivity参考。 也许你可以通过构造函数传递它:

从TestaActivity,您可以:

Print print = new Print(this);

其中this表示TestaActivity的实例。 然后在您的打印代码中,您可以:

TextView tvText = (TextView)((TestaActivity)context.findViewById(R.id.textView1));
tvText.setText("Sample");

另一种解决方案是提供TestaActivity的界面,对外部透明,管理您对textview(或其他)的更改。 这样的事情:

 private TextView tvText;

 public void setTvText(String str){
      tvText.setText( str );
 }

然后在你的Print课程中:

 ((TestaActivity)context).setTvText( "Sample" );

答案 1 :(得分:1)

尝试:

public class Print {
 protected TestaActivity  context;
    public Print(Context tempContext) {

        context = tempContext;
    }
     public void changetextViewtext(final String msg){
            context.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                //assign the value to the tvText from here
                    context.tvText.setText("Hello Test");    
                }
            });
        }
}

并从活动中调用changetextViewtext以更改Print

中的TextView文本
public class TestaActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvText=(TextView)findViewById(R.id.textView1);
        tvText.setText("Sample");
        Print  myPrint  = new Print(this);
            myPrint.changetextViewtext("Hello World !!!");
    }
}

根据您的需要!!!! :)。

答案 2 :(得分:1)

@imran - 解决方案是正确的,除了你想要在构造函数或方法中传递TextView作为参数。

在方法中对TextView进行编码很糟糕,因为您无法重复使用它。