2015-04-18 55 views
1

我不太清楚在ListView(見下文)中將多個不同按鈕的onItemClickListener代碼放在哪裏。我有一個刪除,編輯和一個開關,我希望能夠從這個列表中處理。我在哪裏實施這個聽衆,以及做這件事的最好方法是什麼?ListView視圖中的Android UI項目

謝謝!

enter image description here

我適應

回答

1

,「迴歸convertView」 添加到這裏everybutton其onClicklListener之前適配器的列表項與彈出菜單中選擇爲例(如谷歌玩LIS項):

適配器

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()

這樣被點擊後,特定的按鈕,你就會知道哪些列表項目參與適當的監聽器將被調用。

在您的自定義適配器