2012-06-18 2 views
2

Разрабатывает игровое приложение в Android. В моем приложении у меня есть уровни и добавлены уровни в виде списка.
Теперь мне нужно заблокировать уровни после достижения цели уровня. Я не знаю, как это сделать. Как заблокировать listview в android. Используя следующее, я заполняю список и прохожу мимо.ListView в Android-качестве?

 mainListView = (ListView) findViewById(R.id.mainListView); 
     // mainListView.setSelection(0); 
     String[] levels = new String[] { "Level-1", "Level-2", "Level-3", 
       "Level-4", "Level-5", "Level-6" }; 
     ArrayList<String> levelList = new ArrayList<String>(); 
     levelList.addAll(Arrays.asList(levels)); 

     listAdapter = new ArrayAdapter<String>(this, R.layout.simple, levelList); 

     mainListView.setAdapter(listAdapter); 
     getlevelFromDb(); 
     mainListView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, 
        int myItemInt, long mylng) { 
       String level = (String) (mainListView 
         .getItemAtPosition(myItemInt)); 
       Intent intent = new Intent(LevelsActivity.this, 
         QuestionActivity.class); 
       intent.putExtra("level", level); 
       startActivity(intent); 

      } 
     }); 
+0

Что значит «блокировать уровни»? – trumpetlicks

+0

Игровое приложение имеет 5 уровней. Игрок должен пройти 1-й уровень, чтобы играть на уровне 2. Поэтому нужно блокировать или скрывать другие уровни (элементы списка) – machu

+0

Использовать SharedPreferences для хранения количества уровней в вашем приложении. Он останется до тех пор, пока ваше приложение не будет удалено. – user370305

ответ

1

Если вы хотите использовать строки, как ваш идентификатор уровня, то вы будете иметь, чтобы добавить строки в массиве, как новые уровни разблокированы.

В качестве альтернативы вы можете использовать пользовательский класс уровня с булевым флагом «разблокирован» вместе с пользовательским списком «Адаптер», чтобы отображать только разблокированные уровни.

0

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

if (isLevelUnlocked(level)){ 
    startActivity(intent); 
}else{ 
    //Level is not unlocked yet, display a msg to the user. 
} 
2

В этом случае я бы по существу булев массив (какое-то, есть много способов достижения этих типов значений), который параллелен массив уровней. Чтобы заблокировать их от действий, вы можете поместить проверку против этого булевого массива в самом действии (onItemClick). Таким образом, вы можете действовать только тогда, когда видите истинное, и ничего не делаете, или высказываете небольшое представление, в котором говорится, что они не сделали это так далеко или что-то, если массив объявит false.

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

Если вы хотите серые уровни, которые еще не разблокированы, вам придется реализовать пользовательский ArrayAdapter для ListView !!!

+0

Спасибо, что ... попробуем это. – machu

+0

Имейте в виду, что только массивы исчезнут, как только вы закроете приложение, и, возможно, раньше, вам нужно хранить их где-то каждый раз, когда уровень разблокирован. – mbwasi

+0

@mbwasi - Хорошая точка, что-то, что я считаю присущим, может быть не другим :-) – trumpetlicks

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