Журнал истории нажатий кнопки счетчика приложений

Я провел последний месяц или около того, разрабатывая приложение-счетчик в качестве сопутствующего приложения для подсчета очков в карточной игре, в которую я играю.

Я так близок к завершению, но не могу понять, как создать историю/журнал того, какие кнопки были нажаты. Само приложение имеет 4 счетчика (по 2 на игрока), и мне нужна активность, которая при доступе показывает, сколько раз была нажата кнопка. Например, если у одного игрока было 5 жетонов +1, а у другого — 2 жетона +1, история активности должна показывать это, а также каждое последующее добавление или вычитание. Если у одного игрока есть +2, а через несколько минут есть еще один +2, я хочу, чтобы он говорил сумму с добавленной суммой каждый раз рядом с ним со временем нажатия кнопки. Например вот так:

17:32:12 | 22 | +2

17:34:43 | 25 | +3

17:36:12 | 21 | -4

17:39:51 | 15 | -6 и так далее...

Основное действие содержит все счетчики (кнопки и текстовые представления), и у меня есть кнопка в этом действии, которая отправляет меня к действию истории, в котором я хочу, чтобы все эти данные отображались. Вот фрагмент или метод onClick для моего player1 add кнопка

p1AddL.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            final MediaPlayer buttonSound = MediaPlayer.create(MainActivity.this, R.raw.button_points);
            SharedPreferences muteButton = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            final boolean soundEffects = muteButton.getBoolean("mutebutton", true);
            p1AddL.startAnimation(a);
            if (soundEffects == false)
                buttonSound.start();
            counter1 ++;
            count1 ++;
            if (count1 == 0) {
                if (counter1 >= 9|counter1 <= -1) {
                    lifepointsP1.setText("" + counter1);
                } else
                    lifepointsP1.setText("0" + counter1);
            } else {
                if (count1 > 0) {
                    lifepointsP1.setText("+" + count1);
                    lifepointsP1.setTextColor(Color.GREEN);
                }
                Runnable clickButton = new Runnable() {
                @Override
                public void run() {
                    count1 = 0;
                    lifepointsP1.setTextColor(Color.WHITE);
                    if (counter1 >= 9|counter1 <= -1) {
                        lifepointsP1.setText("" + counter1);
                    } else
                        lifepointsP1.setText("0" + counter1);
                }
            };
            p1AddL.postDelayed(clickButton, 2000);
            }
        }
    });

Что это делает, так это то, что при нажатии кнопки текст меняется на зеленый +1, +2, +3 и т. д. в зависимости от того, сколько раз нажимается кнопка добавления. Через 2 секунды после нажатия кнопки текстовое представление меняется на общее, которое отображается белым цветом.

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

Заранее спасибо за вашу помощь


person RhysBailey21    schedule 02.08.2014    source источник


Ответы (1)


Похоже, вам нужно использовать Intent. Намерение можно использовать для запуска нового действия, но вы также можете добавить данные в намерение для передачи в новое действие.

Вот пример. Вы можете вставить этот код в кнопку истории onClick.

Intent intent = new Intent(getApplicationContext(), YourHistoryActivity.class);
intent.putStringArrayListExtra("DATA_KEY", data);
startActivity(intent);

Затем в onCreate действия History вы можете получить данные следующим образом:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    ArrayList<String> data = extras.getStringArrayListExtra("DATA_KEY");
}

В этом примере я использовал ArrayList строк под названием «данные», так как это один из способов хранения информации об оценке сеанса, но в этом отношении есть много вариантов, и это будет зависеть от того, как вы хотите управлять своими данными.

Дополнительную информацию о намерениях можно найти здесь и здесь.

person Orcrist666    schedule 03.08.2014
comment
Да ладно, это кажется хорошим способом сделать это. Я понимаю, как использовать намерения, но не уверен в массивах. Могу ли я просто вставить каждую кнопку, нажав на новый элемент в массиве? как бы я это сделал? - person RhysBailey21; 06.08.2014
comment
ArrayList не совсем похож на массив. Однако их проще использовать в подобных ситуациях. Вы можете создать ArrayList, а затем добавить новые элементы очень просто, просто выполните arrayListName.add(item), где arrayListName — объявленный вами ArrayList, а item — соответствующий объект, который вы хотите добавить в список. В вашем случае объект может быть объектом, который вы определяете, или это может быть просто строка. Например, эта строка может быть просто датой + newTotal + pointsAdded. Затем в вашей истории Activity просто повторите ArrayList, распечатав элементы, если они являются строками. - person Orcrist666; 07.08.2014
comment
ArrayList строк может быть объявлен следующим образом: ArrayList‹String› myList = new ArrayList‹String›(); - person Orcrist666; 07.08.2014
comment
Вероятно, лучший способ отобразить информацию об истории — использовать ListView в своей истории действий и заполнить ListView с помощью ArrayList и ArrayAdapter. Здесь есть пример: stackoverflow.com/questions/5070830/ - person Orcrist666; 07.08.2014
comment
Да, похоже, это сработает для меня. Я настроил основной массив списка действий, но у меня возникли проблемы с отправкой этих данных в новое действие истории матчей, чтобы затем внедрить его в адаптер массива. У меня нет кнопки в моем основном действии, чтобы перейти прямо к действию истории матчей, поэтому я не могу просто отправить список массивов через намерение. Хотя, если мне нужно сохранить данные в общих настройках, он будет выполнять только одну строку за раз, а затем просто перезаписывать предыдущую каждый раз, когда вводятся новые данные. что вы предлагаете мне сделать здесь, чтобы отправить данные в другую деятельность? - person RhysBailey21; 09.08.2014
comment
Как вы переходите к результатам матчей? Я думал, что вы используете кнопку, чтобы добраться туда, так как вы сказали в своем посте, что основное действие содержит все счетчики (кнопки и текстовые представления), и у меня есть кнопка в этом действии, которая отправляет меня в действие истории... Мой совет - просто добавьте кнопку. Или, если у вас есть приложение, которое автоматически переходит к действию результатов, когда матч заканчивается, вы можете применить там те же методы, что и с помощью кнопки. Я не советую использовать общие настройки, то есть для сохранения настроек, а не для передачи данных. - person Orcrist666; 10.08.2014
comment
да, у меня есть опция в инфляторе меню, чтобы отвести меня к этому занятию. это не непосредственно в основном классе активности. доступны только в главном меню действий. если я могу помочь, мне не нужна кнопка в макете основного действия, и я хочу иметь доступ к журналу истории через матч, а не только в конце. - person RhysBailey21; 10.08.2014
comment
Это должно работать точно так же, просто запустите новую активность в методе onOptionsItemSelected, используя Intent и добавив дополнительные данные, как описано выше, должно работать нормально. - person Orcrist666; 11.08.2014