2012-01-10 3 views
1

J'ai une liste personnalisée et je sélectionne plusieurs éléments dans la liste, maintenant je dois obtenir ces noms d'éléments en cliquant sur un bouton le bouton appellera listfunction() méthode, vous pouvez le voir dans le code ci-dessous.Comment obtenir les éléments sélectionnés à partir de listview en cliquant sur le bouton

public class Places extends Activity { 

    private ListView listView; 

    private static int selectedListItem = -1; 
    private Handler mHandler = new Handler(); 
    private static Vector<String> data; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.places_custom_list_view); 
     data = new Vector<String>(); 

     // Add data as per your requirement 
     data.add("one"); 
     data.add("two"); 
     data.add("three"); 
     data.add("four"); 
     data.add("five"); 
     data.add("six"); 

     listView = (ListView)findViewById(R.id.ListView01); 
     listView.setDivider(null); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //System.out.println(EfficientAdapter.saveState.get(position)); 
       selectedListItem = position; 
       ((EfficientAdapter)listView.getAdapter()).notifyDataSetChanged(); 
       if(EfficientAdapter.saveState.get(position)=="selected"){ 
        EfficientAdapter.saveState.put(position,"unselected"); 
       }else 
       EfficientAdapter.saveState.put(position,"selected"); 
       mHandler.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         // call any new activity here or do any thing you want here   

        } 
       }, 200L); 
      } 
     }); 

     listView.setAdapter(new EfficientAdapter(getApplicationContext())); 
    } 

    private static class EfficientAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     static HashMap<Integer,String> saveState=new HashMap<Integer,String>(); 

     public EfficientAdapter(Context context) { 
      mInflater = LayoutInflater.from(context); 
      for(int i=0;i<data.size();i++) 
      { 
       saveState.put(i,"unselected"); 
      } 

     } 

     public int getCount() { 
      return data.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

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

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

      ViewHolder holder; 

      if (convertView == null || convertView.getTag() == null) { 
       convertView = mInflater.inflate(R.layout.places_custom_row_view, null); 
       holder = new ViewHolder(); 

       holder.txtName = (TextView) convertView 
        .findViewById(R.id.name); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 


      if(saveState.get(position).equals("selected")) 
       holder.txtName.setBackgroundResource(R.drawable.cellbghover); 

      else 
       holder.txtName.setBackgroundResource(R.drawable.cellbgnew); 

      holder.txtName.setText(data.get(position)); 

      return convertView; 
     } 
    } 

    static class ViewHolder { 
     TextView txtName; 
    } 

    public void listfunction(View button) { 
     System.out.println("listfunction items are::::"+selectedListItem); 

    } 
    } 
+0

Travailler sur votre taux d'acceptation s'il vous plaît – aromero

Répondre

1

La liste personnalisée devrait avoir un adaptateur personnalisé. Dans l'adaptateur personnalisé, vous pouvez trouver la méthode nommée getView() avec la vue, la position et le groupe parent. Lorsque vous essayez de cliquer sur un événement, la position représentera l'index de l'élément actuellement sélectionné.

public class MyArrayAdapter extends ArrayAdapter<String> { 
    @Override 
    public View getView(final int position, View convertView,ViewGroup parent) { 
      } 
} 
+0

C'est pour définir la vue de chaque élément, pas pour gérer les événements – aromero

+1

@aromero: dans cette méthode getView() , vous pouvez imp lement l'événement de clic sur le bouton. –

+0

le bouton est situé à l'extérieur de la listview pas dans la liste, donc le code ci-dessus ne fonctionne pas – Vamshi

1

Utilisez un tableau global pour stocker l'index de tous les éléments cliqué ou touché dans la liste, en utilisant ce qui suit:

listview.setOnItemClickListener(
    new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> p, View view, int position,long id) {} 
    } 
); 

où la position sera l'index de l'élément à partir de 0 Ensuite, après avoir cliqué sur le bouton, utilisez le tableau pour récupérer les positions des éléments sur lesquels vous avez cliqué

Questions connexes