0

ユーザーが2つのボタンでカウントアップおよびカウントダウンできる変数を表示しようとしています。これが私のコードです。問題は、それが機能していないように見えることです。「マイナス」を押すと「1」が表示され、「プラス」を押すと何も起こりません。どうもありがとう!

スイッチが最もエレガントなソリューションではないことはわかっていますが、それでも試してみたいと思います

public class StoryCreator extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_story_creator);

    Button b1 = (Button) findViewById(R.id.minus);   
    b1.setOnClickListener(this);

    Button b2 = (Button) findViewById(R.id.plus);   
    b2.setOnClickListener(this);

}

    public void onClick(View v) {

        int Zahl = 1;    

        TextView objekt = (TextView) findViewById(R.id.textView1);  
        objekt.setText("0");

       // Perform action on click
          switch(v.getId())
          {

             case 1: 
                                    Zahl = Zahl-1;
                                    break;
             case 2:
                                    Zahl = Zahl+1;
                                    break;
             default:           
                                    break;
         }


            switch(Zahl) {
            case -1: 
                objekt.setText("-1");
                break;
            case 0: 
                objekt.setText("0");
                break;
            case 1:
                objekt.setText("1");
                break;              
            case 2:
                objekt.setText("2");
                break;      
            case 3:
                objekt.setText("3");
                break;      

            }
4

5 に答える 5

2

スイッチのケースを次のように変更します。

   // Perform action on click
      switch(v.getId())
      {

         case R.id.minus: 
             Zahl = Zahl-1;
              break;
         case R.id.plus:
             Zahl = Zahl+1;
             break;
         default:           
             break;
     }

ボタンのクリックに応じてアクションを実行するには、1,2 の代わりにボタン ID を使用します。

于 2013-02-05T19:55:17.030 に答える
0

これを行うためのよりクリーンな方法は、「implements View.OnClickListener」を削除し、ボタンごとにクリックリスナーを作成することです。

また、上記のソリューションは、実際には1つの変数をインクリメントしません。増分をインスタンス間で持続させたい場合は、それを静的に変換する必要があります。

以下は、必要なものを取得し、View.OnClickListenerでアクティビティを汚染することなくクリーンに実行します。

public class StoryCreator extends Activity {
    TextView textView;
    private static int zahl = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_story_creator);

        Button minus = (Button) findViewById(R.id.minus);   
        minus.setOnClickListener(minusClickListener);

        Button plus = (Button) findViewById(R.id.plus);   
        plus.setOnClickListener(plusClickListener);

        textView = (TextView) findViewById(R.id.textView1);
        textView.setText("0"); //initial value

    }

    private View.OnClickListener minusClickListener= new View.OnClickListener() {
        public void onClick(View v) {
              zahl--;
        }
    } 

    private View.OnClickListener plusClickListener = new View.OnClickListener() {
        public void onClick(View v) {
             zahl++;
        }
    }
于 2013-02-05T20:20:40.060 に答える
0

さて、あなたのコードにはたくさんの問題があります:

  • ボタンを参照するために間違った方法を使用している
  • 以前の値を適切に保存していません
  • 前の値を適切にインクリメントしません
  • など:)

このコードを試してみてください:

public class StoryCreator extends Activity implements OnClickListener {

    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_story_creator);

        Button b1 = (Button) findViewById(R.id.minus);   
        b1.setOnClickListener(this);

        Button b2 = (Button) findViewById(R.id.plus);   
        b2.setOnClickListener(this);

        textView = (TextView) findViewById(R.id.textView1);
        textView.setText("0"); //initial value

    }

    public void onClick(View v) {

        int Zahl = Integer.parseInt(textView.getText().toString());    

       // Perform action on click
          switch(v.getId())
          {

             case R.id.plus: 
                                    Zahl++;
                                    break;
             case R.id.minus:
                                    Zahl--;
                                    break;
             default:           
                                    break;
         }

         textView.setText(String.valueOf(Zahl));
    }
}
于 2013-02-05T20:08:56.333 に答える
0

また、あなたが設定

 int Zahl = 1;    

ボタンがクリックされるたびに、Zahl の値は 0 または 1 のみになる可能性があります

public class StoryCreator extends Activity implements OnClickListener {


int mValue = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_story_creator);

    Button b1 = (Button) findViewById(R.id.minus);   
    b1.setOnClickListener(this);

    Button b2 = (Button) findViewById(R.id.plus);   
    b2.setOnClickListener(this);

}

    public void onClick(View v) {


        TextView objekt = (TextView) findViewById(R.id.textView1);  

       // Perform action on click
          switch(v.getId())
          {

             case R.id.plus: 
                                    mValue++;
                                    break;
             case R.id.minus:
                                    mValue--;
                                    break;
             default:           
                                    break;
         }

          objekt.setText(mValue);
}
于 2013-02-05T20:03:14.417 に答える
0

少し面倒ですが、これはあなたが望むことを正確に行うはずです。

public class CountUpAction extends AbstractAction {
      /** Constructor */
      public CountUpAction(String name, String shortDesc, Integer mnemonic) {
         super(name);
         putValue(SHORT_DESCRIPTION, shortDesc);
         putValue(MNEMONIC_KEY, KeyEvent.VK_NUMPAD4);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
          addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    switch(evt.getKeyCode()) {
                    case KeyEvent.VK_NUMPAD1:

            //original count
            count += 1;
            tfCount.setText(count + "");

                    }
                }
              });
      }
   }

   public class CountDownAction extends AbstractAction {
      /** Constructor */
      public CountDownAction(String name, String shortDesc, Integer mnemonic) {
         super(name);
         putValue(SHORT_DESCRIPTION, shortDesc);
         putValue(MNEMONIC_KEY, KeyEvent.VK_NUMPAD5);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
          addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                switch(evt.getKeyCode()) {
                case KeyEvent.VK_NUMPAD2:

          //original count
          count -= 1;
          tfCount.setText(count + "");

                }
            }
          });
      }
 Action countUpAction = new CountUpAction("Count Up",
            "", new Integer(KeyEvent.VK_ENTER));
      Action countDownAction = new CountDownAction("Count Down",
            "", new Integer(KeyEvent.VK_D));


  tfCount = new JTextField("0", 8);
      tfCount.setHorizontalAlignment(JTextField.CENTER);
      tfCount.setEditable(false);
      tfCount.setSize(100, 20);
      canvas.add(tfCount, BorderLayout.LINE_START);

  //Invisible
      JButton btnCountUp = new JButton();
      btnCountUp.setFocusable(false);
      btnCountUp.setHideActionText(true);
      btnCountUp.setContentAreaFilled(false);
      btnCountUp.setBorderPainted(false);
      canvas.add(btnCountUp, BorderLayout.NORTH);
      //Invisible
      JButton btnCountDown = new JButton();
      btnCountDown.setFocusable(false);
      btnCountDown.setHideActionText(true);
      btnCountDown.setContentAreaFilled(false);
      btnCountDown.setBorderPainted(false);

      canvas.add(btnCountDown);
      // Set actions for buttons
      btnCountUp.setAction(countUpAction);
      btnCountDown.setAction(countDownAction);
于 2013-02-06T10:52:56.977 に答える