我在一个简单的Android应用程序中出现了逻辑错误;
我有3 Buttons
(Permute,Clear和GC),1 EditText
和TextView
。单击“Permute”按钮时,它会将EditText
框中的文本发送到另一个类的方法,并将返回的值设置为TextView
。返回的值只是乱码文本。
当我点击清除时,它会清除EditText
框和TextView
的当前内容; (通过将内容设置为空字符串“”)。
但是,当我在textBox中点击带有新值的Permute时,旧的(已清除)文本会返回下面的较新文本
以下是代码:
包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;
}
}
答案 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中的文本。这应该可以解决问题。