2012-01-14 83 views
1

我在一個簡單的android應用程序中出現邏輯錯誤;邏輯錯誤;即使設置爲空,TextView仍會返回

我有3 Buttons(Permute,Clear和GC),1 EditTextTextView。當單擊Permute按鈕時,它將EditText框中的文本發送到另一個類的方法,並將返回的值設置爲TextView。返回的值只是亂碼文本。

1

當我點擊清除,它會清除EditText框的當前內容和TextView; (通過將內容設置爲空字符串「」)。

2

然而,當我點擊置換,在文本框中新值,老(清除)文本下面

3

這裏的新文本一起返回的代碼:

package 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的被清除的內容也會返回。

編輯如果必要的話,這裏的燙髮類

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

如果不是清除,你設置爲一個不同的任意字符串(比如MilliSeconds中的當前時間或什麼)顯示什麼? – 2012-01-15 11:03:42

+1

點擊'Permute'後,它仍然返回帶有新內容的舊內容。 – Mob 2012-01-15 11:07:32

+0

好的。我已將答案合併到此問題中。感謝您的修理。 – Kev 2012-01-15 15:38:07

回答

1

v從不重置。

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

但是,我不明白爲什麼v甚至存在誠實。我會通過遞歸調用來傳遞它。

1

我不知道CALSS彼爾姆是你正在使用,但爲什麼不嘗試

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

編輯:

您應該先嚐試設置ta字符串變量。

String editText = et.getText.toString(); 

然後將它傳遞給你的TextView

tv.setText(editText); 
+0

我在談論如何清除TextView而沒有以前的文本回來? – Mob 2012-01-14 23:23:07

+0

查看我的編輯 – 2012-01-14 23:41:29

+0

我不工作兄弟,我的問題是如何完全清除TextView的內容** – Mob 2012-01-15 07:24:25

1

我認爲,問題出在你的燙髮類 - 在這裏你有一個靜態的字符串,這是不是在任何地方清除(只是附加) 。如果你在課堂上持有狀態,使這個「V」字符串成爲一個普通的字段,並在需要時實例化你的課程。

+0

你能詳細解釋一下嗎?謝謝。 – Mob 2012-01-15 12:04:46

+0

換句話說:當你需要保持狀態時(在變量v中)使用靜態方法是沒有意義的。使它們成爲正常的方法並在需要時創建實例。它會稍微清理你的解決方案。 – LordTwaroog 2012-01-16 10:34:13

0

將字符串的狀態存儲在Activity中,將其傳遞到Perm類中,然後在清除TextView的同時清除存儲的字符串。

或者在Perm類中創建一個名爲clearString的類,該類設置v = "",並在清除TextView時調用它。

0

您必須通過設置文本「」並清除Perm類中的v值來清除TextView中的文本。這應該夠了吧。

相關問題