逻辑错误;设置为null后,TextView甚至返回

时间:2012-01-14 23:15:53

标签: java android

我在一个简单的Android应用程序中出现了逻辑错误;

我有3 Buttons(Permute,Clear和GC),1 EditTextTextView。单击“Permute”按钮时,它会将EditText框中的文本发送到另一个类的方法,并将返回的值设置为TextView。返回的值只是乱码文本。

1

当我点击清除时,它会清除EditText框和TextView的当前内容; (通过将内容设置为空字符串“”)。

2

但是,当我在textBox中点击带有新值的Permute时,旧的(已清除)文本会返回下面的较新文本

3

以下是代码:

包com.mobinga.string;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.mob.string.Perm; 

public class MoPermActivity extends Activity implements View.OnClickListener {
    Button btn;
    Button btn2;
    Button btn3;
    EditText et;
    TextView tv;
    Vibrator vi;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn =  (Button) findViewById(R.id.Permute);
        btn2 = (Button) findViewById(R.id.Clear);
        btn3 = (Button) findViewById(R.id.GC);
        btn.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        et = (EditText) findViewById(R.id.Text);
        tv = (TextView) findViewById(R.id.textView1);
    }


    public void onClick(View view){
        switch(view.getId()){

        case R.id.Permute:
            vi =  (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                vi.vibrate(50);
                tv.setText(Perm.perm(et.getText().toString()));
            break;

        case R.id.Clear:
            vi =  (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                et.setText("");
                tv.setText("");
                vi.vibrate(50);
            break;

        case R.id.GC:
            vi =  (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            GC();
            vi.vibrate(50);
        }
    }


    public static void GC(){
        Log.d("Permute","Calling GC");
        System.gc();
    }


}

如何正确彻底地清除TextView的内容,并阻止它返回?简单地说:我的问题是,即使清除后,TextView的所谓清除内容也会返回。

如果需要,

编辑这里是Perm Class

package com.mob.string;

public class Perm {
    static String v = "";
     static void permute(int level, String permuted, boolean used[], String original) {
            int length = original.length();
            if (level == length) {
                v +=permuted+"\n";
            } else {
                for (int i = 0; i < length; i++) {
                    if (!used[i]) {
                        used[i] = true;
                        permute(level + 1, permuted + original.charAt(i), used, original);
                        used[i] = false;
                    }
                }
            }
        }
    public String perm(String s){
        boolean used[] = {false, false, false, false, false,false,false};
        permute(0, "", used, s);
        return v;
    }
}

5 个答案:

答案 0 :(得分:1)

我不知道你正在使用的是什么,但为什么不尝试

tv.setText(et.getText().toString());

编辑:

您应该首先尝试将其设置为String变量。

String editText = et.getText.toString();

然后将其传递给TextView

tv.setText(editText);

答案 1 :(得分:1)

我认为问题在于你的Perm类 - 在这里你有一个静态字符串,它不会被清除(只是追加)。如果您在班级中保持状态,请将此“v”字符串设为普通字段,并在需要时实例化您的班级。

答案 2 :(得分:1)

v永远不会重置。

    public String perm(String s){
        v = "";
        boolean used[] = {false, false, false, false, false,false,false};
        permute(0, "", used, s);
        return v;
    }

但是我不明白为什么v甚至存在诚实。我会通过递归调用传递它。

答案 3 :(得分:0)

将字符串的状态存储在Activity中,当您想要向其附加值时将其传递到Perm类,然后在清除{同时清除存储的字符串{ {1}}。

或者在名为TextView的{​​{1}}类中创建一个设置Perm的方法,并在清除clearString时调用它。

答案 4 :(得分:0)

您必须通过设置文本“”并清除Perm类中的v值来清除TextViews中的文本。这应该可以解决问题。