2012-07-03 3 views
1

У меня есть listview с 3-мя текстами. NV1 - NV2 - NV3. Моя проблема в том, что когда я касаюсь NV1, намерение показывает мне макет NV1. Но с другими ничего не происходит. Это просто показывает мне тот же самый NV.ListView с намерением

Я создаю 2 метод передачи информации.

private void adapter (PT1Activity a){ 
     this.a = a; 
    } 

private void showGame(int nivel){ 
    Intent intent = new Intent (PT1Activity.this, NV1.class); 
    intent.putExtra("nivel2", nivel); 
    startActivity(intent); 
} 

А:

частный PT1Activity а;

адаптер (это);

 ltNvs.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 


      a.showGame(position); 
     } 
    }); 

Что мне нужно делать? Передайте информацию другой активности NV2 с помощью Bundle? Или что-то подобное?

+0

Не совсем понятно, что вы просите. Согласно вашему коду, все три кнопки в вашем списке должны вызвать showGame, который всегда запускает NV1.class. Вы хотите запустить другой файл .class в зависимости от того, какая кнопка нажата? – matt5784

+0

Точно, но я не думаю, что мне нужно создать новый метод 2 для другого .class – Azrael94

+0

Вам не нужно добавлять новые методы, но вам нужно иметь какие-то инструкции switch/if, чтобы определить, какая позиция была нажмите. Это не просто волшебное знание. – JuiCe

ответ

0

Ваша функция showgame должно быть что-то вроде этого:

private void showGame(int nivel){ 
Intent intent; 
switch (nivel){ 
    case 1: 
     intent = new Intent (PT1Activity.this, NV1.class); 
     intent.putExtra("nivel1", nivel); 
     break; 
    case 2: 
     intent = new Intent (PT1Activity.this, NV2.class); 
     intent.putExtra("nivel2", nivel); 
     break; 
    case 3: 
     intent = new Intent (PT1Activity.this, NV3.class); 
     intent.putExtra("nivel3", nivel); 
     break; 
    default: 
     intent = new Intent(); 
    } 

startActivity(intent); 
} 

Однако, это предполагает, что все ваши классы находятся в одном пакете. Если вы хотите запустить действие в другом пакете, конструктор Intent(this, yourclass.Class) не будет работать. Вместо этого, попробуйте что-то вроде этого:

Intent intent = new Intent(); 
intent.setComponent(ComponentName.unflattenFromString("your.other.package/your.other.package.your_other_class_name")); 
startActivity(intent); 

Примечание: your_other_class_name будет что-то вроде NV1, не NV1.class.

+0

С вашей формой matt5784 У меня ошибка с дефолтом – Azrael94

+0

Извините, у вас был неверный синтаксис по умолчанию. Должно быть исправлено сейчас ... при условии, что у вас есть все необходимые вещи (три класса с именем NV1, NV2, NV3) – matt5784

+0

У меня есть ошибка. ActivityNotFoundException: Нет активности для обработки Intent " – Azrael94

0

Должен быть честным, я не совсем уверен, о чем вы просите. Надеюсь, вы можете получить представление об этом.

private void showGame(int nivel){ 
    switch(nivel) { 
    case 1: 
     Intent intent = new Intent (PT1Activity.this, NV1.class); 
     intent.putExtra("nivel1", nivel); 
     startActivity(intent); 
     break; 
    case 2: 
     Intent intent = new Intent(PT1Activity.this, NV2.class); 
     intent.putExtra("nivel2", nivel); 
     startActivity(intent); 
     break; 
    case 3: 
     Intent intent = new Intent(PT1Activity.this, NV3.class); 
     intent.putExtra("nivel3", nivel); 
     startActivity(intent); 
     break; 
} 
+0

Я попытался сделать с вашим кодом JuiCe. Но у меня есть «ActivityNotFoundExeption». Странно то, что я объявляю в .manifest – Azrael94

+0

Вы попробовали код мата выше? Я просто пытался дать вам суть этого. – JuiCe

+0

Вы записывали действия NV2 и NV3? – JuiCe

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