2014-09-29 8 views
0

Я пытаюсь выяснить, почему я не могу передать значение int из одной активности в другую. Приложение попросит вас нажать кнопку, чтобы создать случайное число от 1 до 100, которое будет отображаться под кнопкой. Существует еще одна кнопка, которая откроет новую активность, просто показывая случайное число, которое было покатано ... но я просто получаю 0.Android: Передача значения int из одной активности в другую

Я искал похожие вопросы, но безрезультатно.

Вот мой код из MainActivity

public class MainActivity extends ActionBarActivity { 

    int n; 

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

    public void ButtonRoll(View view) { 

     TextView textRoll = (TextView) findViewById(R.id.textview_roll); 
     Random rand = new Random(); 
     n = rand.nextInt(100) + 1; 
     String roll = String.valueOf(n); 
     textRoll.setText("Random number is " + roll); 

    } 

    public void OpenStats(View view) { 
     Intent getStats = new Intent(this, Stats.class); 
     startActivity(getStats); 
    } 

    public int GetNumber(){ return n; } 
} 

Heres мой второй класс.

public class Stats extends Activity { 

    MainActivity statistics = new MainActivity(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.stats); 
     int n = statistics.GetNumber(); 
     TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview); 
     String number = String.valueOf(n); 
     tvStats.setText(number); 
    } 

} 

Является ли использование геттеров неправильным способом получения данных из другого класса при использовании действий? Спасибо за ваше время.

+0

Не похоже, что вы вызываете свой метод 'ButtonRole' –

+0

, и статистика только что создана, а не передана в – Rob

+0

возможной дубликату [Как передать значение из одного действия в другое в Android?] (Http: /stackoverflow.com/questions/3510649/how-to-pass-a-value-from-one-activity-to-another-in-android) – mbmc

ответ

3

Вы должны передать свои данные в дополнение к вашим намерениям. Для этого вам нужно сначала определить глобальный ключ, который будет использоваться. Вы могли бы сделать что-то подобное в вашем MainActivity

public static final String SOME_KEY = "some_key"; 

затем измените метод OpenStats к

public void OpenStats(View view) { 
    Intent getStats = new Intent(this, Stats.class); 
    getStats.putExtra(SOME_KEY, n); 
    startActivity(getStats); 
} 

, а затем в методе OnCreate Stats.class

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.stats); 

    int n = getIntent().getIntExtra(MainActivity.SOME_KEY, -1); 
    TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview); 
    String number = String.valueOf(n); 
    tvStats.setText(number); 
} 

Вы, очевидно, следует убедиться, что вы вызываете ButtonRoll хотя бы один раз или устанавливаете n так, чтобы вы не пропускали нулевой int.

Также в качестве условного обозначения указано, что методы должны использовать форматирование нижнего верблюда. То есть первое слово является полностью строчным, а первая буква последующих слов - это верхний регистр. Это изменит ваши методы

OpenStats() -> openStats() 
ButtonRoll() -> buttonRoll() 

Классы/объекты - это верхний верблюд, только чтобы избежать путаницы.

+0

Главное руководство! Работала отлично. Кроме того, извините за ошибки в соглашении. Так много условностей для запоминания (строки xml, id, классы, методы и т. Д.), Я должен был знать лучше. Еще раз спасибо. – JohnJ73

+0

@ JohnJ73 Не нужно извиняться, есть определенно много рекомендаций относительно форматирования. Он придет со временем. Рад, что смог помочь :) – zgc7009