2012-01-14 13 views
1

私は単純なアンドロイドアプリで論理エラーが発生しています。論理エラー。 nullに設定してもTextViewが返る

私は3 Buttons(Permute、ClearおよびGC)、1 EditTextおよびTextViewを持っています。 Permuteボタンをクリックすると、EditTextボックスのテキストが別のクラスのメソッドに送信され、戻り値がTextViewに設定されます。返される値はちょうど不器用なテキストです。

1

私はクリアをクリックすると、それはEditTextボックスとTextViewの現在の内容をクリアします。 (内容を空文字列 ""に設定することによって)。

2

しかし、私はテキストボックスに新しい値で入れ替えをクリックすると、

ここ

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の内容は、クリアされても元に戻るということです。

編集必要であれば、ここで私はcalssのパーマは、使用しているが何であるかを知っているが、なぜちょうど

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

EDITてみませんいけないパーマクラス

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などの現在の時刻など)を表示すると、何が表示されますか? –

+1

「Permute」をクリックした後、新しいコンテンツが追加された古いコンテンツが返されます。 – Mob

+0

Ok ..私はこの質問に答えをマージしました。修正していただきありがとうございます。 – Kev

答えて

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

です:

は、最初にString変数を設定してみてください。

String editText = et.getText.toString(); 

その後、私は問題があなたのペルミクラスであることを考える

tv.setText(editText); 
+0

私は以前のテキストが戻って来ることなくTextViewをクリアする方法について話していますか? – Mob

+0

私の編集をチェックしてください –

+0

私は仲間になれません。私の質問はTextViewの内容を完全にクリアする方法です** – Mob

1

あなたのTextViewにそれを渡す - ここにあなたがどこにもクリアされていない静的な文字列を、持っている(ちょうど追加) 。クラスでstateを保持している場合は、この "v"文字列を通常のフィールドにし、必要に応じてクラスをインスタンス化します。

+0

あなたはこれにエクスカーションできますか?ありがとう。 – Mob

+0

つまり、(変数vの)状態を保持する必要があるときは、静的メソッドを使用するのは意味がありません。それらを通常の方法にして、必要に応じてインスタンスを作成します。それはあなたのソリューションを少しきれいにします。 – LordTwaroog

0

文字列の状態をActivityに保存し、値を追加するときにPermクラスに渡してから、TextViewをクリアすると同時に格納された文字列を消去します。

または、というクラスのメソッドをv = ""と設定し、TextViewをクリアするときに呼び出します。

0

テキストを設定し、Permクラスのv値をクリアすることで、TextViewのテキストをクリアする必要があります。それはトリックを行う必要があります。

関連する問題