【问题标题】:TextView won't clear for some Reason, Android由于某种原因,TextView 无法清除,Android
【发布时间】:2013-05-10 01:40:15
【问题描述】:

我希望这不是一个愚蠢的问题。我在清除 TextView 时遇到了一些麻烦。我环顾四周,每个人都在说 use: textView.setText("");在 onCreate 但由于某种原因似乎不起作用。基本上,我的应用程序只接受来自 editText 的数字,然后运行斐波那契数列(单击按钮时)并在 textView 中显示结果。好吧,序列显示正常,但我希望每次单击按钮时都清除文本视图 - 到目前为止,它只是不断向已经存在的内容添加更多文本。

我是在放置 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;
}

}

【问题讨论】:

  • 你应该在onClick(View v)里面添加textView.setText("");
  • @dave 只是想知道您是否尝试过我的答案,我看到您尝试了其他答案。
  • 我做的问题是清除我的数组列表然后清除 textView。谢谢。
  • 请注意,在三星 Galaxy 上,必须设置一个 textView 的 inputType 字段(我设置 inputType = text)才能执行 setText("") 或 setText(null)

标签: android textview


【解决方案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;
}

}

【讨论】:

    【解决方案2】:

    在向它添加新结果之前,您需要清除按钮单击事件上的 textView。这样做:

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

    【讨论】:

    • 我刚试过。没有什么。它似乎继续添加到我的数组列表中。我试着做 fibList.clear()。一条日志声明实际上很清楚,但由于某种原因,文本视图不断添加。
    • 好的解决了我自己的问题。我必须将一个字符串变量初始化为“”,然后在构建数组列表之前将 textView 设置为它。
    【解决方案3】:

    问题更可能出现在未清除的 fibList 中

    【讨论】:

    • 我刚刚尝试在 onClick 上使用 fibList.clear() - 没有用。也移动了 textView.setText("") - 也没有。
    • 解决了这个问题。我必须将一个字符串变量初始化为“”,然后将 textView 设置为它——同时清除数组。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2023-03-15
    • 2015-09-30
    相关资源
    最近更新 更多