2012-01-10 2 views
1

У меня есть собственное listview, и я выбираю несколько элементов в списке, теперь мне нужно получить эти имена элементов при нажатии кнопки, на которую назовет кнопка listfunction() метод, вы можете увидеть это в приведенном ниже коде.Как получить выбранные элементы из списка при нажатии на кнопку

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

Работайте с коэффициентом приемки, пожалуйста, – aromero

ответ

1

Пользовательский список должен иметь пользовательский адаптер. В пользовательском адаптере вы можете найти метод с именем getView() вместе с представлением, позицией и родительской группой. Когда вы пытаетесь щелкнуть событие, позиция будет представлять индекс текущего выбранного элемента.

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

Это для определения вида каждого элемента, а не для обработки событий. – aromero

+1

@aromero: внутри этого метода getView() , вы можете lement событие нажатия кнопки. –

+0

кнопка расположена вне стороны списка не в списке, поэтому код выше не работает – Vamshi

1

Используйте глобальный массив для хранения индекса всех элементов нажатия или касания в виде списка с помощью следующих действий:

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

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

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