2013-03-04 3 views
0

Я пытаюсь сделать мои элементы списка доступными; но не может заставить его работать должным образом. Когда я нажимаю на элемент, он меняет экран, но не на нужный экран. Вот кодClickable Items in listview

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
      startActivity(i); 

     } 

    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg1, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg2, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg3, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),DietActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg4, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),FirstAidActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg5, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),MapActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg6, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),SettingsActivity.class); 
      startActivity(i); 
     } 
    }); 
} 

Когда я нажимаю любой элемент списка, открывается действие Accounte Settings Activity. Я новичок, поэтому, пожалуйста, не судите о моем кодировании :)

+1

Вы перекрывая последний слушатель каждый раз, когда вы называете 'setOnItemClickListener()'. Вы должны использовать один прослушиватель, который может обрабатывать разницу между элементами. – Geobits

ответ

1

Попробуйте добавить переключатель заявление вашего щелчка слушателю

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     switch(position){ 
      case 0: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
       startActivity(i); 
     break; 
      case 1: 
     Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(i); 
     break; 
      case 2: 
     Intent i = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(i); 
     break; 
      case 3: 
     Intent i = new Intent(getApplicationContext(),DietActivity.class); 
       startActivity(i); 
     break; 
      case 4: 
     Intent i = new Intent(getApplicationContext(),FirstAidActivity.class); 
       startActivity(i); 
     break; 
      case 5: 
     Intent i = new Intent(getApplicationContext(),MapActivity.class); 
       startActivity(i); 
     break; 
      case 6: 
     Intent i = new Intent(getApplicationContext(),SettingsActivity.class); 
       startActivity(i); 
     break; 

     } 


     } 

    }); 
} 
+0

Спасибо, большая помощь ... :) –

2

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

Чтобы решить эту проблему, используйте один прослушиватель и позвольте этому обрабатывать различные параметры.

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg1, View view, int position, long id) { 
     switch(position) { 
      case 0: 
       // start activity 1 
       break; 
      case 1: 
       // start activity 2 
       break; 
      case 2: 
       // start activity 3 
       break; 
      // more case statements 

    } 
}); 
1

Wh ydon't добавить android:onClick="myClickMethod" в макете для listview, а затем создать метод с таким же именем? Внутри вы можете увидеть, как точно нажал значок whick. Кроме того, ListView имеет только один onClickListener ;-)

Приветствия

0

Это способ сделать это; Я делал это неправильно. Спасибо за помощь. Мир/

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     switch(position){ 
      case 0: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
       startActivity(i); 
     break; 
      case 1: 
     Intent j = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(j); 
     break; 
      case 2: 
     Intent k = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(k); 
     break; 
      case 3: 
     Intent l = new Intent(getApplicationContext(),DietActivity.class); 
       startActivity(l); 
     break; 
      case 4: 
     Intent m = new Intent(getApplicationContext(),FirstAidActivity.class); 
       startActivity(m); 
     break; 
      case 5: 
     Intent n = new Intent(getApplicationContext(),MapActivity.class); 
       startActivity(n); 
     break; 
      case 6: 
     Intent o = new Intent(getApplicationContext(),SettingsActivity.class); 
       startActivity(o); 
     break; 

     } 


     } 

    }); 
0

Вам необходимо создать на прослушивателе, который будет обрабатывать весь список. Что-то вроде этого:

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView arg6, View view, int position, long id) { 
swith(position){ 
     case 1: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
      startActivity(i); 
      break; 
     case 2: 
     ... 
     } 
     } 
    }); 

Или вы можете расширяет класс ArrayAdaptyer и реализовать для каждого элемента одного слушателя