2016-06-14 13 views
3

最近アンドロイドスタジオを使い始めましたが、現在はローマ数字翻訳ツールを開発中です。アプリケーションのインターフェイスは次のようになります。Application interfaceandrioidのメソッド出力としてtextviewを設定するには?

ユーザは、上記のTextViewに表示される整数を入力するためにキーパッドを使用します。変換ボタンを押すと、入力した整数が変換されます(文字列や文字が含まれている場合はプログラムが入力をキャッチできます)。その後、ユーザーが「変換」ボタンを押した後、アプリケーションはTextViewを結果にリセットします。

現在のところ、私の主なアクティビティにはボタン用のonClickListenersと、翻訳用の別のトランスレータメソッドが含まれています。私の問題は、 "変換"ボタンで私はどのように変換メソッドから入力を取得し、変換が完了したらTextViewとしてそれを設定するか分からないです。ここに私のコードのサンプルは次のとおりです。

ボタンは、他の方法

convert.setOnClickListener(
       new View.OnClickListener() { 
        public void onClick(View v) { 
         TextView numeralInput = (TextView) findViewById(R.id.textView); 
         String intValue = numeralInput.getText().toString(); 
         try{ 
          int integer = Integer.parseInt(intValue); 
          if (integer > 0 && integer <= 4999){ 
           translator(integer); 

          }else{ 
           numeralInput.setText("Please enter an integer between 0 and 4,999."); 
          } 

         }catch(NumberFormatException e){ 
          numeralInput.setText("Invalid input try again."); 
         } 
        } 
       } 
     ); 

`

翻訳法 - `

public static void translator(int integer) { 
     LinkedList<String> stack = new LinkedList<String>(); 
     // if (integer > 0 && integer <= 4999) { 
     //ArrayList<Integer> placement = new ArrayList<Integer>(); 
     int place = (int) Math.log10(integer); 
     for (int i = 0; i <= place; i++) { 
      //while(integer > 0){ 
      //System.out.println(integer); 
      int placeOfValue = integer % 10; 
      //stack.push(placeOfValue); 
      //System.out.print(stack); 

      //System.out.print(placeOfValue +":" + i); 
      String placement = ""; 
      switch (i) { 
       case 0: 
        placement = ones(placeOfValue); 

        break; 
       case 1: 
        placement = tens(placeOfValue); 

        break; 
       case 2: 
        placement = hundreds(placeOfValue); 

        break; 
       case 3: 
        placement = thousands(placeOfValue); 

        break; 
       default: 
        break; 
      } 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 
       stack.push(placement); 
      } 
      integer = integer/10; 

      //System.out.print(placement); 
      // System.out.println(placement.size()); 
      //} 
//    for(int j = 0; j < placement.size(); j++){ 
//         double tenthPower = Math.floor(Math.log10(placement.get(j))); 
//         double place = Math.pow(10, tenthPower); 
//         System.out.println(place); 
// 
//    } 
      // } 
      while (!stack.isEmpty()) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 
        System.out.print(stack.pop()); 
       } 
      } 
//  } else { 
//   System.out.println("Please enter an integer between 0 and 4,999."); 
//  } 

     } 
    } 

`

` listener- "変換します"内部の翻訳者は、それぞれに数字を含むローマ数字のライブラリのようなものです以下のように場所の値の

数千人が、あなたのtranslator()方法は、最終的な出力を含む文字列を返すように `

public static String thousands(int integer) { 
     String thouValue = ""; 
     switch (integer) { 

      case 1: 
       thouValue = "M"; 
       //System.out.print("M"); 
       break; 
      case 2: 
       thouValue = "MM"; 
       //System.out.print("MM"); 
       break; 
      case 3: 
       thouValue = "MMM"; 
       //System.out.print("MMM"); 
       break; 
      case 4: 
       thouValue = "MMMM"; 
       //System.out.print("MMMM"); 
       break; 
      default: 
       thouValue = ""; 
       break; 
     } 
     return thouValue; 
    } 

`

答えて

2

をMETHOD-。

だからその方法で while文の前に、文字列のような String result = null;を宣言し、ループ内でこの変数のように、 result += stack.pop()にポップ値を追加します。今

、あなたがtranslator(integer)メソッドを呼び出す場所は、あなたがあなたが他の場所でのTextViewにアクセスできるように、あなたのTextViewクラスのメンバにすると、あなたのOnCreateのバンドルでそれを初期化する必要がある代わりにtranslator(integer)

+1

私たちはこの質問に2つの異なるテイクを持っていますが、おそらく一緒に答えを出しました。 –

+1

そうだね! –

+0

@Prera​​kSolaご返信ありがとうございます!私はあなたが今までに言ったことを徹底的に遂行し、間違いに遭遇しました。私は上記のようにテキストを設定するメソッド呼び出しを変更しましたが、アンドロイドスタジオは "setText(void)メソッドを解決できません"と言っています "文字列を返すように翻訳メソッドを変更した場合、 – Rave

2

numeralInput.setText(translator(integer))を行いますアクティビティ。

TextView numeralInput; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.act_main); 
    numeralInput = (TextView) findViewById(R.id.textView); 

convert.setOnClickListener(
      new View.OnClickListener() { 
       public void onClick(View v) { 

        String intValue = numeralInput.getText().toString(); 
        try{ 
         int integer = Integer.parseInt(intValue); 
         if (integer > 0 && integer <= 4999){ 
          translator(integer); 

         }else{ 
          numeralInput.setText("Please enter an integer between 0 and 4,999."); 
         } 

        }catch(NumberFormatException e){ 
         numeralInput.setText("Invalid input try again."); 
        } 
       } 
      } 
    ); 
+1

あなたの返信ありがとう!修正して、コードにいくつか追加して、それがうまく働いているかどうかを確認しなければなりません。 – Rave

関連する問題