2015-01-22 5 views
0

Мне было интересно, если кто-нибудь знал, как создать метод в отдельном классе, и иметь возможность изменять значения int в основной деятельности. Если вы посмотрите на этот простой счетчик ниже, я хочу, чтобы он мог поместить счетчик + = 1 и т. Д. В onClicks в рамках метода в отдельном классе. Любая помощь приветствуется.Создание методов в отдельных классах

public class MainActivity extends ActionBarActivity { 

    int counter = 0; 
    TextView counterDisplay; 
    Button plusOne, minusOne; 



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

     // Plus One Button 
     plusOne = (Button) findViewById(R.id.btnPlus); 
     counterDisplay = (TextView) findViewById(R.id.tv); 


     plusOne.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       counter += 1; 
       counterDisplay.setText("" + counter); 
      } 
     }); 

     // Subtract One Button 
     minusOne = (Button) findViewById(R.id.btnMinus); 
     counterDisplay = (TextView) findViewById(R.id.tv); 

     minusOne.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       counter -= 1; 
       counterDisplay.setText("" + counter); 
      } 
     }); 

    } 
} 

ответ

0

Вы можете начать путем извлечения анонимного класса во внутренний класс:

...extends Activity { 

    ... 
    minusOne.setOnClickListener(new MyClickListener()); 
    ... 

    private class MyClickListener implements View.OnClickListener { 
     @Override 
     public void onClick(View v) { 
      counter -= 1; 
      counterDisplay.setText(String.valueOf(counter)); 
     } 
    } 

    ... 
} 

Затем вы можете сделать это частный внутренний класс static. Это означает, что он не держит ссылку на внешний класс, активность, то есть он не может изменить поля в деятельности:

private static class MyClickListener implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     counter -= 1; // ERROR - cannot resolve 
     counterDisplay.setText(String.valueOf(counter)); // ERROR cannot resolve 
    } 
} 

Итак, что вы можете сделать, это пройти этот класс все зависимость, необходимую , а именно - две кнопки, дисплей и счетчик (при необходимости):

public class MyActivity extends Activity { 

    @Override 
    public void onCreate() { 
     ... 
     View.OnClickListener clickListener = new MyClickListener(minusButton, plusButton, counterDisplay); 
     minusButton.setOnClickListener(clickListener); 
     plusButton.setOnClickListener(clickListener); 
     ... 
    } 

    ... 

    private static class MyClickListener implements View.OnClickListener { 

     private final Button minusButton; 
     private final Button plusButton; 
     private final TextView counterDisplay; 

     private counter; 

     MyClickListener(Button minusButton, Button plusButton, TextView counterDisplay) { 
      this.minusButton = minusButton; 
      this.plusButton = plusButton; 
      this.counterDisplay = counterDisplay; 
     } 

     ... 
    } 

} 

Теперь вы можете обновить текст:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate() { 
     ... 
     View.OnClickListener clickListener = new MyClickListener(minusButton, plusButton, counterDisplay); 
     minusButton.setOnClickListener(clickListener); 
     plusButton.setOnClickListener(clickListener); 
     ... 
    } 

    ... 

    private static class MyClickListener implements View.OnClickListener { 

     private final Button minusButton; 
     private final Button plusButton; 
     private final TextView counterDisplay; 

     private counter; 

     MyClickListener(Button minusButton, Button plusButton, TextView counterDisplay) { 
      this.minusButton = minusButton; 
      this.plusButton = plusButton; 
      this.counterDisplay = counterDisplay; 
     } 

     @Override 
     public void onClick(View v) { 
      if (v.getId() == minusButton.getId()) { 
       counter--; 
      } else if (v.getId() == plusButton.getId()) { 
       counter++; 
      } 

      counterDisplay.setText(String.valueOf(counter)); 
     } 
    } 

} 
-1

Это может быть лучшей идеей передать счетчика на AsyncTask.

+0

Как бы помочь AsyncTask? – ataulm