2013-05-09 87 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