2013-05-09 107 views
1

我希望這不是一個愚蠢的問題。我在清理TextView時遇到了一些麻煩。我環顧四周,大家一直說使用:textView.setText(「」);在onCreate但似乎沒有工作出於某種原因。基本上,我的應用程序只接受editText中的數字,然後運行斐波那契數列(單擊按鈕時)並將結果顯示在textView中。那麼,序列顯示正常,但我希望textview每次點擊按鈕時清除 - 到目前爲止,它只是添加更多的文本到已經存在的內容。TextView不會清除某些原因,Android

我在放置textView.setText(「」);在錯誤的位置?還是我錯過了其他一些概念? (我也嘗試將它從我的OnClick中放置 - 也沒有工作)。

這裏是我的代碼:

public class MainActivity extends Activity { 

// primary widgets 
private EditText editText; 
private TextView textView; 
private Button button1; 

static ArrayList<Integer> fibList = new ArrayList<Integer>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText = (EditText) findViewById(R.id.editText1); 
    textView = (TextView) findViewById(R.id.textView2); 
    button1 = (Button) findViewById(R.id.button1); 

    //Attempt to clear TextView 
    textView.setText(""); 

    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      String input = editText.getText().toString(); 
      int number = Integer.parseInt(input); 
      int tmp = 0; 

      // confirm input 
      if (number < 20) { 
       Toast.makeText(getApplicationContext(), 
         "You entered: " + number, Toast.LENGTH_LONG).show(); 
       for (int i = 0; i <= number; i++) { 
        fibList.add(fib(i)); 

        // sum even numbers 
        if (fib(i) % 2 == 0) { 
         tmp += fib(i); 

        } 

       } 
      } else { 
       Toast.makeText(getApplicationContext(), 
         "Number is too Large: " + number, Toast.LENGTH_LONG) 
         .show(); 
      } 
      String array = fibList.toString(); 
      textView.setText(array); 

     } 

    }); 

} 

// run fibonacci sequence 
public static int fib(int n) { 
    if (n < 2) { 
     return n; 
    } else { 
     return fib(n - 1) + fib(n - 2); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

}

+0

你應該加上'textView.setText( 「」);''裏面的onClick(視圖v)' – Wamasa 2013-05-09 16:52:20

+0

@戴夫如果你已經嘗試了我的答案,就會受到損傷,我看到你嘗試了其他人。 – TronicZomB 2013-05-09 18:50:04

+0

我做的問題是清除我的數組列表,然後清除textView的組合。謝謝。 – David 2013-05-09 19:13:03

回答

0

你需要增加新的結果it.do它之前清除按鈕單擊事件的TextView:

button1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     textView.setText(""); //<<<<<< clear TextView on Button Click 
     ..... 
+0

我剛試過。沒有。它似乎繼續添加到我的數組列表中。我試着做fibList.clear()。日誌聲明表明事實上清楚,但由於某種原因,文本視圖不斷添加。 – David 2013-05-09 17:37:00

+0

好的解決了我自己的問題。我必須初始化一個字符串變量爲「」,然後在構建數組列表之前將textView設置爲它。 – David 2013-05-09 18:51:24

+0

@dave:好,如果你解決了問題 – 2013-05-09 18:52:45

1

如果你想要TextView清除每個按鈕點擊然後.setText必須在你onClick。您將.setText放入您的onCreate的原因是在創建活動後立即清除文本,但您尚未清除任何內容,因爲您的按鈕尚未按下,所以setText將不會執行任何操作。此外,由於您的onCreate只會針對您的活動運行一次,因此它不會再回到setText。請嘗試以下操作:

public class MainActivity extends Activity { 

// primary widgets 
private EditText editText; 
private TextView textView; 
private Button button1; 

static ArrayList<Integer> fibList = new ArrayList<Integer>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText = (EditText) findViewById(R.id.editText1); 
    textView = (TextView) findViewById(R.id.textView2); 
    button1 = (Button) findViewById(R.id.button1); 



    button1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      textView.setText(""); //Clear the TextView 
      fibList.clear(); //Clear your array list before adding new elements 

      String input = editText.getText().toString(); 
      int number = Integer.parseInt(input); 
      int tmp = 0; 

      // confirm input 
      if (number < 20) { 
       Toast.makeText(getApplicationContext(), 
         "You entered: " + number, Toast.LENGTH_LONG).show(); 
       for (int i = 0; i <= number; i++) { 
        fibList.add(fib(i)); 

        // sum even numbers 
        if (fib(i) % 2 == 0) { 
         tmp += fib(i); 

        } 

       } 
      } else { 
       Toast.makeText(getApplicationContext(), 
         "Number is too Large: " + number, Toast.LENGTH_LONG) 
         .show(); 
      } 
      String array = fibList.toString(); 
      textView.setText(array); 

     } 

    }); 

} 

// run fibonacci sequence 
public static int fib(int n) { 
    if (n < 2) { 
     return n; 
    } else { 
     return fib(n - 1) + fib(n - 2); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 
0

的問題是在fibList更有可能是沒有被清除

+0

我只是嘗試在onClick上使用fibList.clear() - 沒有工作。也移動textView.setText(「」) - 也沒有。 – David 2013-05-09 17:32:51

+0

解決了這個問題。我必須初始化一個字符串變量爲「」,然後將textView設置爲它 - 清除數組。謝謝。 – David 2013-05-09 18:52:09