在同一个Activity中定义的另一个类中识别textview - Android

时间:2011-10-06 13:27:59

标签: android class textview

我有一个名为Main的类,它扩展了Activity。在这个类中,我定义了另一个扩展线程的类。我想从myThread类的方法在textView中设置文本。我调试了我的程序,但是当我想在textview中设置文本时,它表示找不到源代码。

这是我的代码。我希望你能更好地理解我想解释的内容。

单击按钮时会发生这种情况。这是来自Main类中的onCreate函数。

  b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {    
            pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false);
            MyThread mThread = new MyThread();
            mThread.start();

                 }
    });   

这是myThread类。

            class MyThread extends Thread {
            @Override
            public void run(){

                 String result=Main.this.parse();
                 TextView tv=(TextView) findViewById(R.id.textView5);
                 tv.setText(result);
                 Main.this.pd.dismiss();
            }
        }

结果String是一个字符串,由我的Main类中定义的函数进行重新调整。我已经验证,结果还可以。当我到达

行时程序停止
       tv.setText(result);

奇怪的是它在行

没有任何错误
        TextView tv=(TextView) findViewById(R.id.textView5);

感谢您的帮助! :d

       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);   

    tv=(TextView) findViewById(R.id.textView5);
    Button b=(Button) findViewById(R.id.button1);
    final EditText et1=(EditText) findViewById(R.id.editText1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {    
            pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false);
            Log.d("asinc","inainte d downloadtask");
            // Start a new thread that will download all the data
            MyThread mThread = new MyThread();
            mThread.start();
            //parse();   
                 }
    });   

2 个答案:

答案 0 :(得分:0)

尝试在主类中设置onCreate()

private TextView tv; //declare as global so you can used into the subclass or into the methods

onCreate(){
   tv=(TextView) findViewById(R.id.textView5);
}

然后用于线程

答案 1 :(得分:0)

也许我想念soomething,但为什么你从非主线程访问UI组件?据我所知,UI不是线程安全的;所以我建议使用AsyncTask而不是Thread。在这种情况下,您可以将主要的处理代码放入doInBackground方法,并将所有UI组件访问到onPostExecute(在任务执行结束后从主线程调用onPostExecute)。