2015-04-18 5 views
1

Я не совсем уверен, куда поместить код для onItemClickListener для нескольких разных кнопок в Listview (см. Ниже). У меня есть переключатель удаления, редактирования и включения/выключения, с которым я хочу иметь возможность справиться из этого списка. Где я могу реализовать этого слушателя и как лучше всего это сделать?Элементы пользовательского интерфейса Android в представлении ListView

Спасибо!

enter image description here

Мой Адаптировать

ответ

1

в пользовательском адаптере, перед «вернуться convertView» дополнения к everybutton его onClicklListener здесь является Exemple адаптера для элемента списка с всплывающим меню (например, Google Play лиса Items):

адаптер

public class MedecinListAdapter extends BaseAdapter { 
      private Activity activity; 
     private LayoutInflater inflater; 
     private List<MedecinItem> MedecinItems; 

     public MedecinListAdapter(Activity activity, List<MedecinItem> MedecinItems) { 
      this.activity = activity; 
      this.MedecinItems = MedecinItems; 
     } 

     @Override 
     public int getCount() { 
      return MedecinItems.size(); 
     } 

     @Override 
     public Object getItem(int location) { 
      return MedecinItems.get(location); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      if (inflater == null) 
       inflater = (LayoutInflater) activity 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) 
       convertView = inflater.inflate(R.layout.medecin_list_item, null); 


      TextView nom = (TextView) convertView.findViewById(R.id.NomMed); 
      TextView specialite = (TextView) convertView 
        .findViewById(R.id.SpeMed); 
      TextView adresse = (TextView) convertView 
        .findViewById(R.id.AdreMed); 
      TextView numero = (TextView) convertView.findViewById(R.id.NumMed); 

      ImageView imageMed = (ImageView) convertView.findViewById(R.id.imageView3); 

      ImageView image = (ImageView) convertView.findViewById(R.id.imageView); 
      final MedecinItem item = MedecinItems.get(position); 

      nom.setText(item.getNom()); 
      numero.setText(getString(R.string.numero)+":"+item.getNumero()); 
      adresse.setText(getString(R.string.adresse)+":"+item.getAdresse()); 
      if(Locale.getDefault().getLanguage().equals("ar")) 
       specialite.setText(avoirSpeEnArabe(item.getSpecialite())); 
      else 
       specialite.setText(item.getSpecialite()); 
      String spe=avoirSpeEnFrancais(item.getSpecialite()); 

      System.out.println("spe '"+spe+"'"); 
      int id = getResources().getIdentifier(avoirSpe2(spe).toLowerCase(), "drawable", getPackageName()); 

      imageMed.setImageResource(id); 
      image.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        PopupMenu popup = new PopupMenu(MainActivity.context, v); 
        popup.getMenuInflater().inflate(R.menu.medecin_list_menu, 
          popup.getMenu()); 
        popup.show(); 
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
         @Override 
         public boolean onMenuItemClick(MenuItem item2) { 
          line2=item.getNumero(); 
          Emailm=avoirEmail(line2); 
          switch (item2.getItemId()) { 
           case R.id.Appeler: 
           Call(item.getNumero()); 

            break; 
           case R.id.EnvoyerMsg: 
            msg(Emailm); 

            break; 
           case R.id.AfficherDet: 

            menuItem = "3"; 
            Vider(); 
            telecharger(); 

            break; 
           case R.id.Afficher: 

            String Lat; 
            String Lon; 
            Cursor medecin = MainActivity.db.lireMedecin(); 
            while (medecin.getPosition() < medecin.getCount()) { 
             if (medecin.getString(4).equals(line2)) { 
              Lat = medecin.getString(5); 
              Lon = medecin.getString(6); 
              Mapfrag2.map.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(Lat), Double.parseDouble(Lon))) 
                .title(item.getNom()) 
                .snippet(line2).icon(BitmapDescriptorFactory 
                  .fromResource(Icone(medecin.getString(7).charAt(0))))); 
              MainActivity.vp.setCurrentItem(1, true); 
              CameraUpdate zoom = CameraUpdateFactory.zoomTo(15); 
              CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(Double.parseDouble(Lat), Double.parseDouble(Lon))); 
              Mapfrag2.map.moveCamera(center); 
              Mapfrag2.map.animateCamera(zoom); 
             } 
             medecin.moveToNext(); 
            } 

            break; 
           case R.id.AvoirRdv: 
            telecharger(); 
            menuItem = "2"; 

            break; 

           default: 
            break; 
          } 

          return true; 
         } 
        }); 

       } 
      }); 
      if (!MedecinItems.get(position).anime){ 
       Animation animation = AnimationUtils.loadAnimation(MainActivity.context, R.anim.fade_in); 
       convertView.startAnimation(animation); 
       MedecinItems.get(position).anime=true;} 

      return convertView; 
     } 

    } 

вместо удалить это всплывающее меню .. и dothe то же самое для каждой кнопки ..

вот как его использовать:

MedecinListAdapter mla=new MedecinListAdapter(MainActivity.this,medecinItems); 
     ((ListView) findViewById(R.id.listView)).setAdapter(mla); 

где «medecinItems» является ArrayList

просто изменить этот код, и вы готовы пойти

1

В вашей деятельности/фрагменте создать отдельный OnClickListener для каждой кнопки в списке вашего пункте, передать их вам ваш адаптер и и установить их в getView() методы в адаптере. Не забудьте позвонить setTag(getItem(position)) на каждой кнопке в getView() так что в onClick(View view) вы могли бы назвать:

YourListItemInstance item = (YourListItemInstance) view.getTag()

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

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