0

我正在尝试显示一个变量,用户应该能够使用 2 个按钮向上和向下计数。这是我的代码。问题是它似乎不起作用。如果您点击“minues”,则会出现“1”,如果您点击“plus”,则不会发生任何事情。非常感谢!

我知道 switch 可能不是最优雅的解决方案,但我仍然想尝试一下

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;
     }

使用 Button id 而不是 1,2 根据 Button click 执行操作

于 2013-02-05T19:55:17.030 回答
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 回答
0

好吧,您的代码中有很多问题:

  • 您使用错误的方式来引用按钮
  • 您没有正确存储以前的值
  • 您没有正确增加先前的值
  • ETC。 :)

试试这个代码:

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

更简洁的方法是删除“implements View.OnClickListener”并为每个按钮创建单击侦听器。

此外,上述解决方案实际上仍然没有增加单个变量。如果您希望增量在实例之间保持不变,则需要将其转换为静态。

以下将为您提供所需的内容,并且干净利落地执行此操作,而不会使用 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 回答