2015-11-25 3 views
1

Здравствуйте, мои дорогие штабелеры,Кол-во ListView Проверяемые товары

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

Что должен делать мой код? -> Мой код должен создать ListView с CheckBoxes, тогда я должен уметь проверять флажки, а затем подсчитывать количество проверок после нажатия кнопки. Затем я должен передать объекты в следующую операцию, но это не должно быть частью этого вопроса, я просто добавляю это для контекста, это может быть важно для решения.

Что не делает мой код? -> мой код не учитывает поля. ListView.getCheckedItemIds(). Length)); Линия возвращает только 0.

После перечитывания документов ListView, List, Adapter, View и т. Д. И попыток нескольких разных апробатов (и учебных пособий, некоторых из stackoverflow) я не уверен, как обращаться с этим или где начинаются

Адрес: --------------------> Основной класс < ---------------- -

 package com.example.christian.listviewwithcheckbox_model; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends Activity implements AdapterView.OnItemClickListener { 

    int checkCounter = 0; 

    ListView listView; 
    ArrayAdapter<Model> adapter; 
    List<Model> list = new ArrayList<Model>(); 
    private Button mButton; 
    private TextView mCounter; 

    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     listView = (ListView) findViewById(R.id.my_list); 
     adapter = new MyAdapter(this, getModel()); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(this); 


     mCounter = (TextView) findViewById(R.id.counter_text); 

     mButton = (Button) findViewById(R.id.count_button); 
     mButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int count = 0; 
       int size = list.size(); 
       for (int i=0; i<size; i++){ 
        if (list.get(i).isSelected()){ 
         count++; 
        } 
       } 
       mCounter.setText(String.format("%d", count)); 
      } 
     }); 
    } 



    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) { 
     TextView label = (TextView) v.getTag(R.id.label); 
     CheckBox checkbox = (CheckBox) v.getTag(R.id.check); 
     Toast.makeText(v.getContext(), label.getText().toString() + " " + isCheckedOrNot(checkbox), Toast.LENGTH_LONG).show(); 
    } 

    private String isCheckedOrNot(CheckBox checkbox) { 
     if (checkbox.isChecked()) { 
      return "is checked"; 
     } else { 
      return "is not checked"; 
     } 
    } 

    private List<Model> getModel() { 
     list.add(new Model("Linux")); 
     list.add(new Model("Windows7")); 
     list.add(new Model("Suse")); 
     list.add(new Model("Eclipse")); 
     list.add(new Model("Ubuntu")); 
     list.add(new Model("Solaris")); 
     list.add(new Model("Android")); 
     list.add(new Model("iPhone")); 
     list.add(new Model("Java")); 
     list.add(new Model(".Net")); 
     list.add(new Model("PHP")); 
     list.add(new Model("Linux")); 
     list.add(new Model("Windows7")); 
     list.add(new Model("Suse")); 
     list.add(new Model("Eclipse")); 
     list.add(new Model("Ubuntu")); 
     list.add(new Model("Solaris")); 
     list.add(new Model("Android")); 
     list.add(new Model("iPhone")); 
     list.add(new Model("Java")); 
     list.add(new Model(".Net")); 
     list.add(new Model("PHP")); 
     list.add(new Model("Linux")); 
     list.add(new Model("Windows7")); 
     list.add(new Model("Suse")); 
     list.add(new Model("Eclipse")); 
     list.add(new Model("Ubuntu")); 
     list.add(new Model("Solaris")); 
     list.add(new Model("Android")); 
     list.add(new Model("iPhone")); 
     list.add(new Model("Java")); 
     list.add(new Model(".Net")); 
     list.add(new Model("PHP")); 
     return list; 
    } 
} 

--------------> адаптер класса < ------------------ -------

package com.example.christian.listviewwithcheckbox_model; 

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.TextView; 

import java.util.List; 

public class MyAdapter extends ArrayAdapter<Model> { 

    private final List<Model> list; 
    private final Activity context; 
    boolean checkAll_flag = false; 
    boolean checkItem_flag = false; 

    public MyAdapter(Activity context, List<Model> list) { 
     super(context, R.layout.row, list); 
     this.context = context; 
     this.list = list; 
    } 

    static class ViewHolder { 
     protected TextView text; 
     protected CheckBox checkbox; 
    } 

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

     ViewHolder viewHolder = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      convertView = inflator.inflate(R.layout.row, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.label); 
      viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check); 
      viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
       } 
      }); 
      convertView.setTag(viewHolder); 
      convertView.setTag(R.id.label, viewHolder.text); 
      convertView.setTag(R.id.check, viewHolder.checkbox); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 




     viewHolder.checkbox.setTag(position); // This line is important. 

     viewHolder.text.setText(list.get(position).getName()); 
     viewHolder.checkbox.setChecked(list.get(position).isSelected()); 

    return convertView; 
} } 

-------------------> класс Модель < ---------- -------------

package com.example.christian.listviewwithcheckbox_model; 

public class Model { 

    private String name; 
    private boolean selected; 

    public Model(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 
} 

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

Редактировать: Проблема была решена Хоангом Нгуеном и Харди, спасибо вам большое Вышеупомянутый код был обновлен и теперь показывает рабочий код.

ответ

4

используется пользовательский флажок, поэтому не может использовать метод getCheckedItemIds(), пожалуйста, обратитесь к doc и ListView Mode

Для вашей проблемы, легко изменить кнопку метод щелчка, как это:

mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int count = 0; 
      int size = list.size(); 
      for (int i=0; i<size; i++){ 
       if (list.get(i).isSelected()){ 
        count++; 
       } 
      } 
      mCounter.setText(String.format("%d", count)); 
     } 
    }); 
+0

работает отлично, спасибо так много. – Eomer

0

Положите ниже линии

convertView.setTag(viewHolder); 
     convertView.setTag(R.id.label, viewHolder.text); 
     convertView.setTag(R.id.check, viewHolder.checkbox); 

viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
       list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
      } 
     }); 

Так что ваш код будет, наконец выглядеть следующим образом: -

if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      convertView = inflator.inflate(R.layout.row, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.label); 
      viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check); 

     convertView.setTag(viewHolder); 
     convertView.setTag(R.id.label, viewHolder.text); 
     convertView.setTag(R.id.check, viewHolder.checkbox); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
     viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
       list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
      } 
     }); 
+0

работы тоже совершенно, большое спасибо. – Eomer

+0

он рушится в моем случае onCheckedChanged, помощь pls – Panache

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