2011-12-26 11 views
0

私は既存の進行状況バーと共にテキストビューカウンタを持つことが必要な宿題プロジェクトに取り組んでいます。私はjavaファイルとmain.xmlにtextviewコードを追加しました。エミュレータで実行すると、「アプリケーションxxxが予期せず停止しました」というメッセージが表示されます。私は原因を突き止めることができませんでした。ここに私のコードは次のとおりです。 (コードのインデントは完全に適切ではない、私はそうなるように努力しています。) ソースファイル:追加されたtextviewコードがエミュレータでアプリケーションをクラッシュしました

package com.mypackage; 

import android.app.Activity; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MyButtonActivity extends Activity { 
    static final int PROGRESS_DIALOG = 0; 
    Button button; 
    ProgressThread progressThread; 
    ProgressDialog progressDialog; 
    TextView Int; 

/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Int = (TextView)findViewById(R.id.Int); 

    // Setup the button that starts the progress dialog 
    button = (Button) findViewById(R.id.myButton); 
    button.setOnClickListener(new Button.OnClickListener(){ 
     public void onClick(View v) { 
      // Show dialog managed by this activity 
      showDialog(PROGRESS_DIALOG); 
     } 
    }); 
} 

// Callback for creating dialogs that are managed (saved and restored) 
// for you by the activity. 
protected Dialog onCreateDialog(int id) { 
    switch(id) { 
    case PROGRESS_DIALOG: 
     progressDialog = new ProgressDialog(MyButtonActivity.this); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.setMessage("Loading..."); 

     // Create and start the handler 
     progressThread = new ProgressThread(handler); 
     progressThread.start(); 

     return progressDialog; 
    default: 
     return null; 
    } 
} 

// Define the Handler that receives messages from the thread and update 
// the progress 
final Handler handler = new Handler() { 
    public void handleMessage(Message msg) { 
     int total = msg.getData().getInt("total"); 
     progressDialog.setProgress(total); 
     Int.setText(String.valueOf(total)); 

     if (total >= 100){ 
      dismissDialog(PROGRESS_DIALOG); 
      progressThread.setState(ProgressThread.STATE_DONE); 
     } 
    } 
}; 

/** Nested class that performs progress calculations (counting) */ 
private class ProgressThread extends Thread { 
    Handler mHandler; 
    final static int STATE_DONE = 0; 
    final static int STATE_RUNNING = 1; 
    int mState; 
    int total; 

    ProgressThread(Handler h) { 
     mHandler = h; 
    } 

    public void run() { 
     mState = STATE_RUNNING; 
     total = 0; 
     while (mState == STATE_RUNNING) { 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       Log.e("ERROR", "Thread Interrupted"); 
      } 
      Message msg = mHandler.obtainMessage(); 
      Bundle b = new Bundle(); 
      b.putInt("total", total); 
      msg.setData(b); 
      mHandler.sendMessage(msg); 
      total++; 
     } 
    } 

    /* sets the current state for the thread, 
    * used to stop the thread */ 
    public void setState(int state) { 
     mState = state; 
    } 

} 

私だけ(main.xmlへのTextViewなど、既存のコードに数行を追加しました)。では、単にtextviewカウンタを実装するためにtextviewコードを追加するよりも複雑ですか?イントロレベルコースの最初のプロジェクトの1つで、テキストビューを追加するだけでその要件を満たすことができます。教えてください。ありがとう!

+0

あなたはlogcatをチェックしてもらえ修正をクリックして、そのエラーを投稿ここに投げる? – KSubedi

答えて

0

私はあなたのコードをテストし、それは私のために働いた!あなたがしようとしました:

  1. Eclipseのバープロジェクト - >クリーンプロジェクトの下で右プロジェクトのAndroid [ツール] - > [プロジェクトのプロパティ
+1

ヒントをありがとう!問題が解決しました:Logcatは、textviewにlayout_widthが指定されていないと述べました。 – macrogeo

関連する問題