2014-09-06 2 views
-2

Я довольно новичок в android, поэтому, пожалуйста, простите мое невежество или некомпетентность.Цикл через массив с помощью кнопок

Я создаю приложение высказываний (цитат), которые хранятся в массиве и отображаются через TextView с использованием .setText.

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

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

Любая помощь будет отличной. Благодарю.

Это то, что я до сих пор:

public class Sayings extends Activity implements OnClickListener { 

HashMap<String, Integer> sayingsResIds = new HashMap<String, Integer>(); 

MediaPlayer mp; 

String[] sayings = {"Saying1", "Saying2", "Saying3", "Saying4", "Saying5"}; 


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

    Animation anim; 

    anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in); 

    TextView sayingsTextView = (TextView) findViewById(R.id.displaySayings); 

    sayingsTextView.startAnimation(anim); 

    Button btnRandom = (Button) findViewById(R.id.random_button); 
    Button btnNext = (Button) findViewById(R.id.next_button); 
    Button btnBack = (Button) findViewById(R.id.back_button); 

    btnRandom.setOnClickListener(this); 
    btnNext.setOnClickListener(this); 
    btnBack.setOnClickListener(this); 

    sayingsResIds.put("Saying1",R.raw.saying1); 
    sayingsResIds.put("Saying2",R.raw.saying2); 
    sayingsResIds.put("Saying3",R.raw.saying3); 
    sayingsResIds.put("Saying4",R.raw.saying4); 
    sayingsResIds.put("Saying5",R.raw.saying5); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.sayings, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 

    Animation anim; 

    TextView sayingsTextView = (TextView) findViewById(R.id.displaySayings); 

    anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in2); 

    int resId = 0; 

    switch (v.getId()) { 

    case R.id.random_button: 

     String randomSaying = (sayings[new Random().nextInt(sayings.length)]); 

     sayingsTextView.setText('"' + randomSaying + '"'); 

     resId = sayingsResIds.get(randomSaying); 

     sayingsTextView.startAnimation(anim); 
     break; 

    case R.id.next_button: 
     // Click Next to find next saying in the array  
     break; 

    case R.id.back_button: 
     // Click Back to find the previous saying in the array 
     break; 
    }  

    if (mp != null) {   
    mp.release(); 
    }  
    mp = MediaPlayer.create(this, resId); 
    mp.start();   
    } 
+0

Создайте переменную INT класс под названием что-то вроде 'currentPosition' и запустить его в 0. Если они попали в следующем, то приращение (++) его и показать этот пункт на этой позиции в массиве. Если они ударят, то уменьшите (-) и покажите элемент в этой позиции в массиве. Просто проверьте, находитесь ли вы в начале или конце индекса. – csmckelvey

+0

Эй, спасибо за ответ. Я понимаю псевдо, потому что я просто не уверен точно, как реализовать его в коде. –

+0

Сделайте снимок и задайте вопросы о том, что вы придумали. Ответ ниже - это в точности то же самое, что я сказал, и он ложка кормит вас всем. – csmckelvey

ответ

2

Прежде всего вам нужно объявить поле в классе, чтобы отслеживать текущее высказывание (котировки).

Integer current; 

также вам необходимо переместить следующую инструкцию из onClick и объявить ее как поле в классе.

Integer resId = 0; 

Затем измените OnCreate метод, что код, приведенный ниже

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    //After buttons being declared 
    current = 0; 
    btnBack.setEnabled(false); 
    btnNext.setEnabled(true); 
    String randomSaying = (sayings[current]); 
    sayingsTextView.setText('"' + randomSaying + '"'); 
    resId = sayingsResIds.get(randomSaying); 
    sayingsTextView.startAnimation(anim); 
    //Rest of your code 
} 

Теперь вы можете изменить код OnClick следующим

@Override 
public void onClick(View v) { 
    //your code 
    switch (v.getId()) { 
     case R.id.random_button: 
      current = new Random().nextInt(sayings.length); 
      String randomSaying = (sayings[current]); 
      sayingsTextView.setText('"' + randomSaying + '"'); 
      resId = sayingsResIds.get(randomSaying); 
      sayingsTextView.startAnimation(anim); 
      if(current == 0){ 
       btnBack.setEnabled(false); 
       btnNext.setEnabled(true); 
      } else if(current == sayings.length - 1){ 
       btnBack.setEnabled(true); 
       btnNext.setEnabled(false); 
      } else { 
       btnBack.setEnabled(true); 
       btnNext.setEnabled(true); 
      } 
      break; 

     case R.id.next_button: 
      // Click Next to find next saying in the array 
      if(current == 0){ 
       btnBack.setEnabled(true); 
      } 
      current++; 
      String randomSaying = (sayings[current]); 
      sayingsTextView.setText('"' + randomSaying + '"'); 
      resId = sayingsResIds.get(randomSaying); 
      sayingsTextView.startAnimation(anim); 
      if(current == sayings.length - 1){ 
       btnNext.setEnabled(false); 
      }  
      break; 

     case R.id.back_button: 
      // Click Next to find next saying in the array 
      if(current == sayings.length - 1){ 
       btnNext.setEnabled(true); 
      } 
      current--; 
      String randomSaying = (sayings[current]); 
      sayingsTextView.setText('"' + randomSaying + '"'); 
      resId = sayingsResIds.get(randomSaying); 
      sayingsTextView.startAnimation(anim); 
      if(current == 0){ 
       btnBack.setEnabled(false); 
      }  
      break; 
    } 
    // your code 
}  

Позвольте мне знать, если это работает!

Edit:

Вот концепция

  • Для случайным образом говоря
    1. если ток равен 0, это означает, что мы обрабатываем первые говорят из массива. Таким образом, нам пришлось бы отключить кнопку «назад», потому что раньше не было речи.
    2. если текущий говорит.length - 1, это означает, что мы обрабатываем последнее высказывание из массива. Таким образом, мы должны были бы отключить следующую кнопку, потому что после этого нечего говорить.
    3. если ток больше 0 и меньше, чем say.length, это означает, что мы обрабатываем высказывание из массива, который не является ни первым, ни последним. Таким образом, мы должны были бы включить и назад, и следующую кнопку, чтобы перемещаться вперед и назад.
  • При следующем нажатии кнопки
    1. если ток 0, мы будем двигаться вперед. Включите кнопку «Назад», чтобы мы могли перемещаться назад.
    2. Приращение тока
    3. процесса говоря
    4. Проверка после приращения, если ток равен saying.length - 1, то мы достигли в конце массива поэтому отключаем следующую кнопку, чтобы ограничить пользователя от движущихся дальше.
  • Когда кнопка нажата назад
    1. если ток saying.length, мы будем двигаться в обратном направлении. Включите следующую кнопку, чтобы мы могли перемещаться вперед.
    2. Decrement ток
    3. процесса говоря
    4. Проверка после декремента, если ток равен 0, то мы достигли в начале массива, чтобы отключить кнопку назад, чтобы ограничить пользователя от движения назад.
+0

Эй, большое спасибо за ваш ответ! Я действительно надеюсь узнать об этом и посмотреть, где я ошибаюсь, чтобы продвигаться вперед в программировании, поэтому я ценю ваше время. У меня, кажется, запутаны ошибки: Первый был .setEnable на кнопках, я прав, говоря, что это была только опечатка, и это должно быть .setEnabled? На resId = sayingsResIds.get (randomSaying); в onCreate. Он сообщает мне, что «resId не может быть разрешен переменной». Может ли быть так, что resId не является глобальной переменной? Также все кнопки в корпусе переключателя не могут быть разрешены. Еще раз спасибо. –

+0

yes, .setEnable должен быть .setEnabled и разрешить ошибку с resId, переместить его объявление с onClick на уровень класса. Отредактировал свой ответ, чтобы решить эти проблемы. Надеюсь, теперь это сработает. Дайте мне знать, если это работает –

+0

Я также отредактировал код для случайного случая –

Смежные вопросы