2016-03-28 16 views
1

У меня есть ListView с CheckBox и EditText. Я хочу получить имя и EditText значение зарегистрированного CheckBoxes по адресу Button. Как я могу это сделать? МетодКак получить элементы ListView при нажатии кнопки?

Моей GetView():

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.scrap_list_row_item, parent, false); 
     final EditText kg = (EditText) convertView.findViewById(R.id.editText1); 
     final CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     final TextView txtKg = (TextView) convertView.findViewById(R.id.textView1); 
     final float scale = context.getResources().getDisplayMetrics().density; 
     cb.setPadding(cb.getPaddingLeft() + (int)(10.0f * scale + 0.5f), 
       cb.getPaddingTop(), 
       cb.getPaddingRight(), 
       cb.getPaddingBottom()); 
     //cb.setText(modelItems[position].getName()); 
     cb.setText(arrayScrapItems.get(position).getItemName()); 

     cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        if(isChecked) 
        { 
         // Toast.makeText(context, "You checked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background_active); 
         kg.setBackgroundResource((R.drawable.kg_box)); 
         txtKg.setTextColor(Color.parseColor("#000000")); 
         kg.setFocusable(true); 
         kg.setEnabled(true); 
        } 
        else 
        { 
         //Toast.makeText(context, "You unchecked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background); 
         kg.setBackgroundResource((R.drawable.kg_box_inactive)); 
         txtKg.setTextColor(Color.parseColor("#D3D3D3")); 
         kg.setFocusable(false); 
         kg.setEnabled(false); 
        } 
       } 
      } 
     ); 

     return convertView; 
+0

Существует так много учебников для флажка с ListView – Piyush

ответ

0

Как ListView перерабатывает это взгляды вы не можете, при случае нажатия кнопки пройти через все элементы списка и посмотреть, если они проверены или нет, потому что есть только столько просмотров, сколько строк видно в вашем списке. Например. если в списке указано 1000 строк, и 20 из них могут отображаться одновременно на экране, в ListView будет только 20 представлений (т. е. 20 проверок и 20 EditTexts), и это зависит от реализации ListAdapter, чтобы заполнить их правильными данными любой из 1000 строк, в зависимости от того, насколько далеко прокручивается список.

Поэтому вам нужно будет отслеживать проверенные строки и его тексты в какой-то нестандартной модели.

И когда у вас есть вся эта информация в модели, вы можете легко получить к ней доступ, щелкнув эту кнопку.

Итак, прежде всего, вам нужно будет изменить свой код таким образом, чтобы вы только создавали новое представление, если convertView равно null. Если он не является нулевым, вы просто обновляете его состояния в состоянии строки в заданном position. Это состояние должно исходить из вашей модели вне экрана.

Надеюсь, что этот ответ приведет вас к правильному пути, в любом случае вам следует ознакомиться с тем, как ListViews перерабатывает представления.

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