Android settext()来自另一个类(不是活动)无法正常工作

时间:2013-09-03 10:49:43

标签: android android-layout

我有一个主要的活动,我有一个布局膨胀。 我在活动中有一个文本视图(textView),我想从另一个名为'Util.java'的类中更新(这个类没有扩展任何东西,它只是一个库类),我在那里编写了项目常用的方法可用性)。

现在接收广播后,我通过使用'Util.setLoadingText(R.string.loadingText_creating_device);'

调用Util.java中的方法来更新'textView'的文本。
 public static void setLoadingText(int resId) {
    if (!Util.isNull(loadingText)) {
        Log.d(Util.TAG, LOG_LABEL + "SET TEXT CALLED:SHOW LOADING SCREEN" );
        loadingText.setText(resId);

    }
}

在调用上面的方法之前,我在主活动的onCreate中调用'Util.init(this)'。它是

的代码
 public static void init(Activity activity) {
    activity.setContentView(R.layout.loading_screen);
    Log.d(Util.TAG, LOG_LABEL + "INIT CALLED:SHOW LOADING SCREEN" );
    loadingText = (TextView) activity.findViewById(R.id.loadingScreenTextView);
}

没有编译错误,但

  loadingText.setText(resId);

不会更新文字。 任何人都可以指出我哪里错了吗?

3 个答案:

答案 0 :(得分:2)

除了ui线程之外你不能在任何地方更新ui线程上的东西。你需要使用它。在哪个mAct是主要活动但是你必须将它传递给另一个类,所以它有访问它,因为它不能成为静态参考

public static void updateText(Activity act, resID)
{

 loadingText = (TextView) activity.findViewById(R.id.loadingScreenTextView);
          act.runOnUiThread(new Runnable() 
                {
                     public void run() 
                     {
                       loadingText.setText(resID);

                     }

                });
}

答案 1 :(得分:1)

尝试实现界面。在课程Util.java中写道:

public interface onSomeEventListener {
    public void someEvent(String s);
}

onSomeEventListener someEventListener;

someEventListener.someEvent("Test text to...");

在活动中:

public class MainActivity extends Activity implements onSomeEventListener{

@Override
public void someEvent(String s) {
    loadingText.setText(resId);
}

答案 2 :(得分:0)

来自非活动类

//call class name
  VerifyMobile Sms = new VerifyMobile();
                    Sms.recivedSms(s);

来自活动类VerifyMobile.java

static EditText verify_numbertext;

verify_numbertext = (EditText)findViewById(R.id.verify_numbertext);

在editText

中设置文本的功能
public static void recivedSms(String message) 
     {
         verify_numbertext.setText(message);

     }